COMPILATION LISTING OF SEGMENT login_server_ Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Bull, Phx. Az., Sys-M Compiled on: 08/04/87 1304.2 mst Tue Options: optimize map 1 /****^ ******************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* ******************************************** */ 6 7 /****^ HISTORY COMMENTS: 8* 1) change(85-03-01,Coren), approve(87-06-25,MCR7679), audit(87-02-28,GDixon), 9* install(87-08-04,MR12.1-1055): 10* Initial coding. 11* 2) change(87-02-28,GDixon), approve(87-06-25,MCR7679), 12* audit(87-05-19,Parisek), install(87-08-04,MR12.1-1055): 13* A) Correct coding standard violations, cleanup handler errors. 14* B) Pass ls_ssu_info.(login connect)_info_dir on to endpoint control 15* points. 16* C) Add list_endpoints (lsep) request to login server. 17* D) Change quit request to work correctly if ls_ssu_info.n_endpoints 18* ever goes negative. 19* E) Make call to login_service_entries.stop_listen work correctly. 20* (I'm not sure how this problem was fixed, but it was.) (dsa 73) 21* 3) change(87-04-13,GDixon), approve(87-06-25,MCR7679), 22* audit(87-05-19,Parisek), install(87-08-04,MR12.1-1055): 23* Correct overlength comments. 24* 4) change(87-05-08,GDixon), approve(87-06-25,MCR7679), 25* audit(87-05-19,Parisek), install(87-08-04,MR12.1-1055): 26* Change control point comments to include endpoint name as well as 27* connection name, since same Login Server process may be listening to 28* several endpoints which provide indistinguishable connection names. 29* 5) change(87-05-08,GDixon), approve(87-06-25,MCR7679), 30* audit(87-05-19,Parisek), install(87-08-04,MR12.1-1055): 31* Add the endpoints_listening request. 32* 6) change(87-05-14,GDixon), approve(87-06-25,MCR7679), 33* audit(87-05-19,Parisek), install(87-08-04,MR12.1-1055): 34* Correct control point comments. 35* 7) change(87-05-18,GDixon), approve(87-06-25,MCR7679), 36* audit(87-05-19,Parisek), install(87-08-04,MR12.1-1055): 37* A) Use new calling sequence of login_service_entries.listen. 38* B) Set ls_connection_desc.minimum_ring. 39* 8) change(87-06-08,GDixon), approve(87-06-25,MCR7679), 40* audit(87-07-06,Parisek), install(87-08-04,MR12.1-1055): 41* A) Correct declaration of rv, the active request return value. 42* 9) change(87-06-25,GDixon), approve(87-06-25,MCR7679), 43* audit(87-07-06,Parisek), install(87-08-04,MR12.1-1055): 44* A) Add trace calls to record errors from control points. 45* B) Check ls_ssu_info.call_probe before entering probe upon error from 46* control points. 47* C) Print "Entering probe:" when probe is called, to make it more 48* obvious that probe has been entered. 49* END HISTORY COMMENTS */ 50 51 /* format: style4,delnl,insnl,^ifthendo */ 52 53 login_server_: 54 procedure (); 55 56 return; /* main entry point is never used */ 57 58 /* subroutine that processes requests issued to login server. The "start_service" and "stop_service" 59* entrypoints are invoked via ssu_$listen. The "listen" entry point is the initial procedure 60* for the control point that listens on a given endpoint. 61**/ 62 63 /* PARAMETERS */ 64 65 dcl a_sci_ptr pointer parameter; 66 dcl a_info_ptr pointer parameter; 67 68 69 /* AUTOMATIC */ 70 71 dcl access_class_range (2) bit (72) aligned; 72 dcl af_sw bit(1) aligned; 73 dcl arg_count fixed bin; 74 dcl attach_description char (512) varying; 75 dcl code fixed bin (35); 76 dcl connection_gone_event_channel fixed bin (71); 77 dcl connection_handle fixed bin (35); 78 dcl connection_info_len fixed bin (18) unsigned; 79 dcl connection_info_ptr pointer; 80 dcl connection_name char (32); 81 dcl control_point_id bit (36) aligned; 82 dcl disconnect_event_channel fixed bin (71); 83 dcl endpoint_name char (32); 84 dcl ep_found bit (1); 85 dcl event_wait_info_ptr pointer; 86 dcl last_endpoint_p pointer; 87 dcl last_listen_failure_time fixed bin (71); 88 dcl minimum_ring fixed bin; 89 dcl n_listening fixed bin; 90 dcl n_listen_failures fixed bin; 91 dcl print_error_event_channel fixed bin (71); 92 dcl quit_ok bit (1); 93 dcl reply_error_event_channel fixed bin (71); 94 dcl rv_len fixed bin(21); 95 dcl rv_ptr ptr; 96 dcl sci_ptr pointer; 97 dcl time_now fixed bin (71); 98 99 /* AUTOMATIC STRUCTURES */ 100 101 dcl 1 auto_event_channel aligned like event_wait_channel; 102 103 dcl 1 auto_ipc_create_arg aligned like ipc_create_arg_structure; 104 105 /* BASED */ 106 107 dcl rv char (rv_len) varying based (rv_ptr); 108 dcl system_area area based (system_areap); 109 110 /* ENTRIES */ 111 112 dcl command_query_$yes_no entry () options (variable); 113 dcl dsa_log_manager_$trace_message entry options (variable); 114 dcl get_process_id_ entry () returns (bit (36)); 115 dcl get_system_free_area_ entry () returns (ptr); 116 dcl hcs_$wakeup entry (bit (36) aligned, fixed bin (71), fixed bin (71), fixed bin (35)); 117 dcl ioa_ entry() options(variable); 118 dcl ioa_$ioa_switch entry () options (variable); 119 dcl ipc_$block entry (ptr, ptr, fixed bin (35)); 120 dcl ipc_$create_event_channel entry (pointer, fixed bin (71), fixed bin (35)); 121 dcl ipc_$delete_ev_chn entry (fixed bin (71), fixed bin (35)); 122 dcl login_server_connection_ entry (pointer); 123 dcl login_server_$listen entry (pointer); 124 dcl net_info_$get_service_entries entry (char (*), char (*), pointer, fixed bin (35)); 125 dcl probe entry options (variable); 126 dcl ssu_$arg_count entry (ptr, fixed bin); 127 dcl ssu_$arg_ptr entry (ptr, fixed bin, ptr, fixed bin (21)); 128 dcl ssu_$abort_line entry () options (variable); 129 dcl ssu_$print_message entry () options (variable); 130 dcl ssu_$return_arg entry (ptr, fixed bin, bit(1) aligned, ptr, fixed bin(21)); 131 dcl ssu_requests_$quit entry (ptr, ptr); 132 133 /* EXTERNAL STATIC */ 134 135 dcl ( 136 error_table_$listen_stopped, 137 error_table_$wrong_no_of_args 138 ) fixed bin (35) external static; 139 140 dcl iox_$error_output pointer external static; 141 142 143 /* INTERNAL STATIC */ 144 145 dcl system_areap pointer internal static initial (null ()); 146 147 dcl NORMAL_PRIORITY fixed bin internal static options (constant) initial (1); 148 dcl ERROR_PRIORITY fixed bin internal static options (constant) initial (1); 149 dcl OUR_NAME char (13) internal static options (constant) initial ("login_server_"); 150 dcl MAX_LISTEN_FAILURES fixed bin internal static options (constant) initial (4); 151 dcl LISTEN_FAILURE_TIME_LIMIT fixed bin (71) internal static options (constant) initial (60 * 1000000); 152 /* one minute */ 153 154 155 /* BUILTINS & CONDITIONS */ 156 157 dcl (addr, before, clock, length, null, rtrim, string, substr, unspec) builtin; 158 159 dcl cleanup condition; 160 161 start_service: 162 entry (a_sci_ptr, a_info_ptr); 163 164 /* "start_login_service" request: sets up a control point to listen on the specified endpoint */ 165 166 sci_ptr = a_sci_ptr; 167 ls_ssu_info_ptr = a_info_ptr; 168 169 call Setup (ep_found); 170 171 if ep_found 172 then if ls_endpoint_list.awaiting_destruction 173 then do; /* not active at the moment, tell it to start up again */ 174 call hcs_$wakeup ((get_process_id_ ()), ls_endpoint_list.restart_event_channel, 0, code); 175 if code ^= 0 176 then call ssu_$abort_line (sci_ptr, code, "Could not send wakeup to restart ^a", endpoint_name); 177 return; /* that's it for this request */ 178 end; 179 180 else call ssu_$abort_line (sci_ptr, 0, "login service has already been started for ^a", endpoint_name); 181 182 if system_areap = null () 183 then system_areap = get_system_free_area_ (); 184 ccpi_ptr, ls_endpoint_listp, ls_listen_info_ptr = null (); 185 on cleanup call Remove_endpoint (); 186 187 /* make an entry for it */ 188 189 allocate ls_endpoint_list in (system_area) set (ls_endpoint_listp); 190 191 if ls_ssu_info.trace 192 then call dsa_log_manager_$trace_message (LS_CALLER_TYPE, OUR_NAME, INFO_LOG_SEVERITY, 0, null (), 0, "", 193 "Adding endpoint ^a at ^p.", endpoint_name, ls_endpoint_listp); 194 195 unspec (ls_endpoint_list) = ""b; 196 ls_endpoint_list.version = LS_ENDPOINT_LIST_V1; 197 ls_endpoint_list.name = endpoint_name; 198 ls_endpoint_list.next_endpoint = null (); 199 ls_endpoint_list.control_point_id = ""b; 200 ls_endpoint_list.service_entries_ptr = null (); 201 202 /* add it to tail of list */ 203 204 if ls_ssu_info.last_endpoint_ptr = null () 205 then do; 206 ls_ssu_info.first_endpoint_ptr, ls_ssu_info.last_endpoint_ptr = ls_endpoint_listp; 207 ls_endpoint_list.prev_endpoint = null (); 208 end; 209 210 else do; 211 last_endpoint_p = ls_ssu_info.last_endpoint_ptr; 212 last_endpoint_p -> ls_endpoint_list.next_endpoint, ls_ssu_info.last_endpoint_ptr = ls_endpoint_listp; 213 ls_endpoint_list.prev_endpoint = last_endpoint_p; 214 end; 215 216 ls_ssu_info.n_endpoints = ls_ssu_info.n_endpoints + 1; 217 218 /* now set up a control point to listen on it */ 219 220 allocate ls_listen_info in (system_area) set (ls_listen_info_ptr); 221 222 ls_listen_info.version = LS_LISTEN_INFO_V1; 223 ls_listen_info.sci_ptr = sci_ptr; 224 ls_listen_info.ssu_info_ptr = ls_ssu_info_ptr; 225 ls_listen_info.endpoint_list_ptr = ls_endpoint_listp; 226 227 ccpi_user_io_attach_desc_length = 0; /* we're not supplying an attach description */ 228 allocate create_control_point_info in (system_area) set (ccpi_ptr); 229 230 create_control_point_info.version = CREATE_CONTROL_POINT_INFO_VERSION_1; 231 create_control_point_info.comment = rtrim (endpoint_name) || 232 ": Endpoint Listener"; 233 create_control_point_info.initproc.entry = login_server_$listen; 234 create_control_point_info.initproc.info_ptr = ls_listen_info_ptr; 235 create_control_point_info.priority = 1; 236 string (create_control_point_info.flags) = ""b; 237 create_control_point_info.independent = "1"b; 238 create_control_point_info.header.pad = "0"b; 239 240 call cpm_$create (ccpi_ptr, ls_endpoint_list.control_point_id, code); 241 free create_control_point_info in (system_area); /* don't need this any more in any case */ 242 243 if code ^= 0 244 then do; 245 call Remove_endpoint (); 246 call ssu_$abort_line (sci_ptr, code, "Could not create control point to listen on ^a", endpoint_name); 247 end; 248 249 else do; 250 call cpm_$start (ls_endpoint_list.control_point_id, code); 251 252 if code ^= 0 253 then do; 254 call cpm_$destroy (ls_endpoint_list.control_point_id, (0)); 255 call Remove_endpoint (); 256 call ssu_$abort_line (sci_ptr, code, "Could not start control point to listen on ^a", endpoint_name); 257 end; 258 end; 259 260 return; /* all done with start_login_service */ 261 262 stop_service: 263 entry (a_sci_ptr, a_info_ptr); 264 265 /* "stop_login_service" request: stop listening on a specified andpoint */ 266 267 sci_ptr = a_sci_ptr; 268 ls_ssu_info_ptr = a_info_ptr; 269 ccpi_ptr, ls_endpoint_listp, ls_listen_info_ptr = null (); 270 271 call Setup (ep_found); 272 273 if ^ep_found 274 then call ssu_$abort_line (sci_ptr, 0, "^a is not active.", endpoint_name); 275 276 login_service_entries_ptr = ls_endpoint_list.service_entries_ptr; 277 if system_areap = null () 278 then system_areap = get_system_free_area_ (); 279 280 if login_service_entries_ptr ^= null () 281 then do; 282 283 call login_service_entries.stop_listen (endpoint_name, code); 284 285 if code ^= 0 286 then do; 287 call ssu_$print_message (sci_ptr, code, "Could not send stop_listen to ^a", endpoint_name); 288 289 if ls_endpoint_list.n_connections = 0 290 then do; 291 call cpm_$destroy (ls_endpoint_list.control_point_id, code); 292 /* if the stop_listen succeeds, */ 293 if ls_ssu_info.trace /* it will destroy itself when it gets the wakeup */ 294 then call dsa_log_manager_$trace_message (LS_CALLER_TYPE, OUR_NAME, INFO_LOG_SEVERITY, code, 295 null (), 0, "", "Destroying control point ^.3b", ls_endpoint_list.control_point_id); 296 end; 297 end; 298 end; 299 300 else if ls_endpoint_list.control_point_id ^= ""b 301 then do; 302 call cpm_$destroy (ls_endpoint_list.control_point_id, code); 303 304 if ls_ssu_info.trace 305 then call dsa_log_manager_$trace_message (LS_CALLER_TYPE, OUR_NAME, INFO_LOG_SEVERITY, code, null (), 0, 306 "", "Destroying control point ^.3b", ls_endpoint_list.control_point_id); 307 308 call Remove_endpoint (); /* take it out of the list */ 309 end; 310 311 return; /* done with stop_login_service */ 312 313 quit: 314 entry (a_sci_ptr, a_info_ptr); 315 316 /* "quit" request exits the login server. If there are any outstanding endpoints, 317* and more particularly, active connections, the user may not really want to do 318* this, so we will ask. If there aren't, or he says yes, pass it on to the standard 319* ssu_ quit request. 320**/ 321 322 sci_ptr = a_sci_ptr; 323 ls_ssu_info_ptr = a_info_ptr; 324 325 if ls_ssu_info.n_endpoints <= 0 326 then quit_ok = "1"b; /* we weren't doing anything anyway */ 327 328 else do; 329 call ssu_$print_message (sci_ptr, 0, "The following endpoints are active:"); 330 331 do ls_endpoint_listp = ls_ssu_info.first_endpoint_ptr repeat (ls_endpoint_list.next_endpoint) 332 while (ls_endpoint_listp ^= null ()); 333 call ssu_$print_message (sci_ptr, 0, "^-^a (^d connections)", ls_endpoint_list.name, 334 ls_endpoint_list.n_connections); 335 end; 336 337 call command_query_$yes_no (quit_ok, 0, OUR_NAME, 338 "Outstanding connections will not be cleaned up properly.", "Do you want to quit?"); 339 end; 340 341 if quit_ok 342 then call ssu_requests_$quit (sci_ptr, ls_ssu_info_ptr); 343 else call ssu_$print_message (sci_ptr, 0, 344 "Please use stop_login_service to stop listening to the endpoints."); 345 346 return; 347 348 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 349 /* */ 350 /* This entry returns/prints a count of endpoints being listened to. */ 351 /* */ 352 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 353 354 endpoints_listening: 355 entry (a_sci_ptr, a_info_ptr); 356 357 sci_ptr = a_sci_ptr; 358 ls_ssu_info_ptr = a_info_ptr; 359 360 call ssu_$return_arg (sci_ptr, arg_count, af_sw, rv_ptr, rv_len); 361 362 n_listening = 0; 363 if ls_ssu_info.n_endpoints ^= 0 364 then do; 365 do ls_endpoint_listp = ls_ssu_info.first_endpoint_ptr repeat (ls_endpoint_list.next_endpoint) 366 while (ls_endpoint_listp ^= null); 367 if ^ls_endpoint_list.awaiting_destruction 368 then n_listening = n_listening + 1; 369 end; 370 end; 371 372 if af_sw 373 then if n_listening > 0 374 then rv = "true"; 375 else rv = "false"; 376 else call ioa_ ("^d ^[endpoint is^;endpoints are^] listening.", 377 n_listening, n_listening = 1); 378 return; 379 380 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 381 /* */ 382 /* This entry lists endpoints which have been started, and those which have */ 383 /* subsequently been stopped but are still awaiting destruction. */ 384 /* */ 385 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 386 387 list_endpoints: 388 entry (a_sci_ptr, a_info_ptr); 389 390 sci_ptr = a_sci_ptr; 391 ls_ssu_info_ptr = a_info_ptr; 392 393 if ls_ssu_info.n_endpoints = 0 394 then call ioa_ ("No endpoints are active.^/"); 395 else do; 396 call ioa_ ("End Point Name^33tComments"); 397 do ls_endpoint_listp = ls_ssu_info.first_endpoint_ptr repeat (ls_endpoint_list.next_endpoint) 398 while (ls_endpoint_listp ^= null); 399 call ioa_ ("^32a ^3d connections^[, end point stopped^]", ls_endpoint_list.name, 400 ls_endpoint_list.n_connections, ls_endpoint_list.awaiting_destruction); 401 end; 402 end; 403 return; 404 405 listen: 406 entry (a_info_ptr); 407 408 /* This entry is invoked as the initial procedure of a control point created to listen on a particular endpoint. 409* It issues a "listen" call, which goes blocked until a connection is established, 410* whereupon a new control point is created to engage in dialogue over that particular connection 411* (and ultimately to assign the connection to a user process, if appropriate). 412* Having created such a control point, it goes back and issues another listen. 413* This loop continues until and unless the listen call returns a non-zero status code. 414**/ 415 416 ls_listen_info_ptr = a_info_ptr; 417 sci_ptr = ls_listen_info.sci_ptr; 418 ls_ssu_info_ptr = ls_listen_info.ssu_info_ptr; 419 ls_endpoint_listp = ls_listen_info.endpoint_list_ptr; 420 ccpi_ptr = null (); 421 if system_areap = null () 422 then system_areap = get_system_free_area_ (); 423 424 on cleanup call Remove_endpoint (); 425 426 endpoint_name = ls_endpoint_list.name; 427 428 auto_ipc_create_arg.version = ipc_create_arg_structure_v1; 429 auto_ipc_create_arg.channel_type = CALL_EVENT_CHANNEL_TYPE; 430 auto_ipc_create_arg.call_entry = error_message_handler; 431 auto_ipc_create_arg.call_data_ptr = null (); 432 auto_ipc_create_arg.call_priority = ERROR_PRIORITY; 433 434 call ipc_$create_event_channel (addr (auto_ipc_create_arg), print_error_event_channel, code); 435 if code ^= 0 436 then do; 437 call ssu_$print_message (sci_ptr, code, "Could not create event channel for error messages."); 438 call Remove_endpoint (); 439 return; 440 end; 441 442 auto_ipc_create_arg.channel_type = WAIT_EVENT_CHANNEL_TYPE; 443 call ipc_$create_event_channel (addr (auto_ipc_create_arg), reply_error_event_channel, code); 444 if code ^= 0 445 then do; 446 call ssu_$print_message (sci_ptr, code, "Could not create reply event channel for error messages."); 447 call Remove_endpoint (); 448 return; 449 end; 450 451 allocate login_service_entries in (system_area) set (login_service_entries_ptr); 452 login_service_entries.version = LS_ENTRIES_V1; 453 454 call net_info_$get_service_entries ("login_service", endpoint_name, login_service_entries_ptr, code); 455 456 if code ^= 0 457 then do; 458 call ssu_$print_message (sci_ptr, code, "Could not get service entries for ^a", endpoint_name); 459 call Remove_endpoint (); 460 return; /* thus destroying the current control point */ 461 end; 462 auto_ipc_create_arg.channel_type = CALL_EVENT_CHANNEL_TYPE; 463 auto_ipc_create_arg.call_entry = Connection_gone_handler; 464 auto_ipc_create_arg.call_data_ptr = ls_endpoint_listp; 465 auto_ipc_create_arg.call_priority = NORMAL_PRIORITY; 466 call ipc_$create_event_channel (addr (auto_ipc_create_arg), connection_gone_event_channel, code); 467 468 if code ^= 0 469 then do; 470 call ssu_$print_message (sci_ptr, code, "Could not create connection_gone event channel for ^a", 471 endpoint_name); 472 call Remove_endpoint; 473 return; 474 end; 475 476 auto_ipc_create_arg.channel_type = WAIT_EVENT_CHANNEL_TYPE; 477 call ipc_$create_event_channel (addr (auto_ipc_create_arg), ls_endpoint_list.restart_event_channel, code); 478 479 if code ^= 0 480 then do; 481 call ssu_$print_message (sci_ptr, code, "Could not create restart event channel for ^a", endpoint_name); 482 call Remove_endpoint; 483 return; 484 end; 485 486 ls_endpoint_list.service_entries_ptr = login_service_entries_ptr; 487 488 /* Here's the listen loop. Until something makes us stop, we will come back here 489* to listen after passing off each established connection. If a listen fails for some 490* reason other than a stop_login_service request (which causes the code error_table_$listen_stopped 491* to be returned), we will try it again until we get MAX_LISTEN_FAILURES within LISTEN_FAILURE_TIME_LIMIT. 492**/ 493 494 CALL_LISTEN: 495 last_listen_failure_time = 0; 496 n_listen_failures = 0; 497 498 auto_ipc_create_arg.channel_type = WAIT_EVENT_CHANNEL_TYPE; 499 call ipc_$create_event_channel (addr (auto_ipc_create_arg), disconnect_event_channel, code); 500 /* dialogue control point may convert */ 501 /* this to an event call channel */ 502 if code ^= 0 503 then do; 504 call ssu_$print_message (sci_ptr, code, "Could not create disconnect event channel for ^a", endpoint_name); 505 call Remove_endpoint (); 506 return; /* and die */ 507 end; 508 509 RETRY_LISTEN: 510 call login_service_entries.listen ( 511 endpoint_name, system_areap, disconnect_event_channel, 512 connection_name, connection_handle, connection_info_ptr, 513 connection_info_len, attach_description, access_class_range, 514 minimum_ring, code); 515 516 if ls_ssu_info.trace 517 then call dsa_log_manager_$trace_message (LS_CALLER_TYPE, OUR_NAME, INFO_LOG_SEVERITY, code, null (), 0, "", 518 "Listen on ^a.", endpoint_name); 519 520 if code ^= 0 521 then do; 522 523 /* if code indicates that this is the result of a "stop_listen" request, all is cool */ 524 525 if code ^= error_table_$listen_stopped /* otherwise, it's worth reporting */ 526 then do; 527 call ssu_$print_message (sci_ptr, code, "Listen failed on ^a", endpoint_name); 528 529 time_now = clock (); /* and possibly retrying */ 530 if time_now - last_listen_failure_time > LISTEN_FAILURE_TIME_LIMIT 531 then do; /* hasn't been one in a while, start count */ 532 last_listen_failure_time = time_now; 533 n_listen_failures = 1; 534 go to RETRY_LISTEN; 535 end; 536 537 else do; /* how many have there been? */ 538 if n_listen_failures < MAX_LISTEN_FAILURES 539 then do; /* not too many yet */ 540 n_listen_failures = n_listen_failures + 1; 541 go to RETRY_LISTEN; 542 end; 543 544 else call ssu_$print_message (sci_ptr, 0, "Too many listen failures. Abandoning endpoint ^a.", 545 endpoint_name); /* guess it's hopeless. */ 546 end; /* fall through to code to wrap up endpoint */ 547 end; 548 549 /* if there are any outstanding connections created for this endpoint, we can't 550* go away yet; so check, and if so, just wait (they'll wake us up when they're 551* about to die) */ 552 553 if ls_endpoint_list.n_connections > 0 554 then do; 555 ls_endpoint_list.awaiting_destruction = "1"b; 556 auto_event_channel.channel_id = ls_endpoint_list.restart_event_channel; 557 call ipc_$block (addr (auto_event_channel), event_wait_info_ptr, code); 558 559 /* if a fresh start_login_service request is entered for this endpoint while we're waiting, 560* we'll just go back and listen again */ 561 562 ls_endpoint_list.awaiting_destruction = "0"b; 563 /* new lease on life */ 564 go to CALL_LISTEN; 565 end; 566 567 DESTROY_CP: /* connection_gone_handler branches here */ 568 call Remove_endpoint (); /* if the connection count goes to 0 */ 569 if ls_ssu_info.trace 570 then call dsa_log_manager_$trace_message (LS_CALLER_TYPE, OUR_NAME, INFO_LOG_SEVERITY, 0, null (), 0, "", 571 "Return from control point ^.3b (endpoint ^a).", get_control_point_id_ (), endpoint_name); 572 573 return; /* THIS IS NORMAL EXIT */ 574 end; 575 576 /* we have a connection now, so set up all the info for the control point */ 577 578 revert cleanup; 579 ccpi_ptr, ls_error_info_ptr, ls_cp_info_ptr, ls_connection_desc_ptr = null (); 580 on cleanup call Remove_connection (); 581 582 allocate ls_connection_desc in (system_area) set (ls_connection_desc_ptr); 583 584 if ls_ssu_info.trace 585 then call dsa_log_manager_$trace_message (LS_CALLER_TYPE, OUR_NAME, INFO_LOG_SEVERITY, 0, null (), 0, "", 586 "Added connection ^a at ^p.", connection_name, ls_connection_desc_ptr); 587 588 ls_connection_desc.version = LS_CONNECTION_DESC_V1; 589 ls_connection_desc.name = connection_name; 590 ls_connection_desc.endpoint_name = endpoint_name; 591 if attach_description ^= "" 592 then ls_connection_desc.io_module = before (attach_description, " "); 593 else ls_connection_desc.io_module = ""; 594 ls_connection_desc.connection_handle = connection_handle; 595 ls_connection_desc.disconnect_event_channel = disconnect_event_channel; 596 ls_connection_desc.service_entries_ptr = login_service_entries_ptr; 597 ls_connection_desc.connection_info_ptr = connection_info_ptr; 598 ls_connection_desc.connection_info_len = connection_info_len; 599 ls_connection_desc.access_class_range = access_class_range; 600 ls_connection_desc.minimum_ring = minimum_ring; 601 ls_connection_desc.terminate_event_channel = 0; 602 ls_connection_desc.process_info_ptr = null (); 603 604 allocate ls_cp_info in (system_area) set (ls_cp_info_ptr); 605 606 ls_cp_info.version = LS_CP_INFO_V1; 607 ls_cp_info.connection_desc_ptr = ls_connection_desc_ptr; 608 ls_cp_info.error_event_channel = print_error_event_channel; 609 ls_cp_info.connection_gone_event_channel = connection_gone_event_channel; 610 string (ls_cp_info.flags) = ""b; 611 ls_cp_info.flags = ls_ssu_info.flags, by name; 612 ls_cp_info.no_io_switches = (attach_description = ""); 613 ls_cp_info.answer_table_ptr = ls_ssu_info.answer_table_ptr; 614 ls_cp_info.installation_parms_ptr = ls_ssu_info.installation_parms_ptr; 615 ls_cp_info.login_info_dir = ls_ssu_info.login_info_dir; 616 ls_cp_info.connect_info_dir = ls_ssu_info.connect_info_dir; 617 618 allocate ls_error_info in (system_area) set (ls_error_info_ptr); 619 ls_cp_info.error_info_ptr = ls_error_info_ptr; 620 ls_error_info.version = LS_ERROR_INFO_V1; 621 ls_error_info.reply_event_channel = reply_error_event_channel; 622 ls_error_info.caller_name, ls_error_info.error_message = ""; 623 624 ccpi_user_io_attach_desc_length = length (rtrim (attach_description)); 625 allocate create_control_point_info in (system_area) set (ccpi_ptr); 626 627 create_control_point_info.version = CREATE_CONTROL_POINT_INFO_VERSION_1; 628 create_control_point_info.comment = rtrim(ls_endpoint_list.name) || 629 ": " || rtrim(connection_name) || " login dialogue"; 630 create_control_point_info.initproc.entry = login_server_connection_; 631 create_control_point_info.initproc.info_ptr = ls_cp_info_ptr; 632 create_control_point_info.priority = 1; 633 string (create_control_point_info.flags) = ""b; 634 create_control_point_info.independent = "1"b; 635 if attach_description ^= "" 636 then do; 637 create_control_point_info.separate_standard_iocbs = "1"b; 638 create_control_point_info.user_io_attach_desc_given = "1"b; 639 end; 640 641 create_control_point_info.header.pad = ""b; 642 create_control_point_info.user_io_attach_desc = attach_description; 643 644 call cpm_$create (ccpi_ptr, control_point_id, code); 645 free create_control_point_info in (system_area); 646 647 if code ^= 0 648 then do; 649 call ssu_$print_message (sci_ptr, code, "Could not create control point for dialogue on ^a", 650 connection_name); 651 call Remove_connection (); 652 end; 653 654 else do; 655 revert cleanup; 656 call cpm_$start (control_point_id, code); 657 if code ^= 0 658 then do; 659 call ssu_$print_message (sci_ptr, "Could not start control point for dialogue on ^a", connection_name) 660 ; 661 call cpm_$destroy (control_point_id, (0)); 662 /* we don't have much use for this any more */ 663 call Remove_connection (); 664 end; 665 666 else ls_endpoint_list.n_connections = ls_endpoint_list.n_connections + 1; 667 end; 668 669 go to CALL_LISTEN; /* go around again to listen for another connection */ 670 671 error_message_handler: 672 entry (a_info_ptr); 673 674 /* event call handler for printing error messages intended for the daemon, but 675* generated by control points for the individual connections. The event message 676* is actually a pointer to the ls_cp_info. The calling control point waits for 677* a wakeup from this handler before resuming. 678**/ 679 680 event_call_info_ptr = a_info_ptr; 681 unspec (ls_cp_info_ptr) = unspec (event_call_info.message); 682 ls_error_info_ptr = ls_cp_info.error_info_ptr; 683 ls_connection_desc_ptr = ls_cp_info.connection_desc_ptr; 684 685 call ioa_$ioa_switch (iox_$error_output, "^a (^a): ^a", ls_error_info.caller_name, ls_connection_desc.name, 686 substr (ls_error_info.error_message, 1, ls_error_info.error_message_length)); 687 688 if ls_cp_info.trace 689 then call dsa_log_manager_$trace_message (LS_CALLER_TYPE, OUR_NAME, INFO_LOG_SEVERITY, 0, null (), 0, "", 690 "Error: ^a (^a): ^a", ls_error_info.caller_name, ls_connection_desc.name, 691 substr (ls_error_info.error_message, 1, ls_error_info.error_message_length)); 692 693 if ls_cp_info.call_probe 694 then do; 695 call ioa_$ioa_switch (iox_$error_output, "Entering probe:^/"); 696 call probe (); 697 end; 698 699 /* tell calling control point it's OK to run again */ 700 701 call hcs_$wakeup (event_call_info.sender, ls_error_info.reply_event_channel, 0, (0)); 702 return; 703 704 Connection_gone_handler: 705 procedure (a_info_ptr); 706 707 /* event call handler invoked when a child control point is on the way out and has 708* deleted its connection. This allows us to decrement the count of outstanding 709* connections; if it goes to 0 and we were waiting to be able destroy ourselves, 710* then we will do so. */ 711 712 dcl a_info_ptr pointer parameter; 713 dcl ls_end_listp pointer; 714 dcl 1 ls_end_list aligned like ls_endpoint_list based (ls_end_listp); 715 716 event_call_info_ptr = a_info_ptr; 717 ls_end_listp = event_call_info.data_ptr; /* set our own pointer to ls_endpoint_list struct */ 718 719 ls_end_list.n_connections = ls_end_list.n_connections - 1; 720 if ls_end_list.n_connections <= 0 721 then if ls_end_list.awaiting_destruction 722 then go to DESTROY_CP; /* we can wrap it up now */ 723 724 return; /* otherwise, as you were */ 725 end Connection_gone_handler; 726 727 Setup: 728 procedure (found); 729 730 /* Process the request argument and find out if the specified endpoint is listed already. */ 731 732 /* This procedure sets the outer block's variables "endpoint_name" and "ls_endpoint_listp" */ 733 734 dcl found bit (1) parameter; 735 736 dcl cur_ls_endpoint_listp ptr; 737 dcl nargs fixed bin; 738 dcl argp pointer; 739 dcl argl fixed bin (21); 740 dcl arg char (argl) based (argp); 741 742 743 call ssu_$arg_count (sci_ptr, nargs); 744 if nargs ^= 1 745 then call ssu_$abort_line (sci_ptr, error_table_$wrong_no_of_args, "Usage: start_login_service ENDPOINT_NAME"); 746 747 call ssu_$arg_ptr (sci_ptr, 1, argp, argl); 748 749 endpoint_name = arg; 750 found = "0"b; 751 ls_endpoint_listp = null (); 752 753 /* see if the specified endpoint is in the list of active ones */ 754 755 if ls_ssu_info.n_endpoints ^= 0 756 then do cur_ls_endpoint_listp = ls_ssu_info.first_endpoint_ptr 757 repeat (cur_ls_endpoint_listp -> ls_endpoint_list.next_endpoint) 758 while ((cur_ls_endpoint_listp ^= null ()) & (^found)); 759 if cur_ls_endpoint_listp -> ls_endpoint_list.name = endpoint_name 760 then do; 761 found = "1"b; 762 ls_endpoint_listp = cur_ls_endpoint_listp; 763 end; 764 end; 765 766 return; 767 768 end Setup; 769 770 Remove_endpoint: 771 procedure (); 772 773 /* take the endpoint list entry pointed to by ls_endpoint_ptr out of the list */ 774 775 dcl prev_ptr pointer; 776 777 if ls_ssu_info.trace 778 then call dsa_log_manager_$trace_message (LS_CALLER_TYPE, OUR_NAME, INFO_LOG_SEVERITY, 0, null (), 0, "", 779 "Removing endpoint ^a at ^p.", ls_endpoint_list.name, ls_endpoint_listp); 780 781 if ccpi_ptr ^= null () 782 then free create_control_point_info in (system_area); 783 784 if ls_listen_info_ptr ^= null () 785 then free ls_listen_info in (system_area); 786 787 if ls_endpoint_listp = null 788 then return; 789 790 prev_ptr = ls_endpoint_list.prev_endpoint; 791 if prev_ptr = null () 792 then ls_ssu_info.first_endpoint_ptr = ls_endpoint_list.next_endpoint; 793 else prev_ptr -> ls_endpoint_list.next_endpoint = ls_endpoint_list.next_endpoint; 794 795 if ls_endpoint_list.next_endpoint = null () 796 then ls_ssu_info.last_endpoint_ptr = prev_ptr; 797 else ls_endpoint_list.next_endpoint -> ls_endpoint_list.prev_endpoint = prev_ptr; 798 799 if ls_endpoint_list.service_entries_ptr ^= null () 800 then free ls_endpoint_list.service_entries_ptr -> login_service_entries in (system_area); 801 free ls_endpoint_list in (system_area); 802 803 ls_ssu_info.n_endpoints = ls_ssu_info.n_endpoints - 1; 804 return; 805 806 end Remove_endpoint; 807 808 Remove_connection: 809 procedure (); 810 811 /* close a connection that couldn't be run, and free the storage associated with it. */ 812 813 if ls_cp_info_ptr ^= null () 814 then do; 815 if ls_error_info_ptr ^= null () 816 then free ls_error_info in (system_area); 817 free ls_cp_info in (system_area); 818 end; 819 820 if ccpi_ptr ^= null () 821 then free create_control_point_info in (system_area); 822 823 if ls_ssu_info.trace 824 then call dsa_log_manager_$trace_message (LS_CALLER_TYPE, OUR_NAME, INFO_LOG_SEVERITY, 0, null (), 0, "", 825 "Removing connection ^a at ^p.", connection_name, ls_connection_desc_ptr); 826 827 call login_service_entries.disconnect (connection_name, connection_handle, ""b, (0)); 828 call ipc_$delete_ev_chn (disconnect_event_channel, (0)); 829 830 if ls_connection_desc_ptr ^= null 831 then free ls_connection_desc in (system_area); 832 833 return; 834 835 end Remove_connection; 836 1 1 /* BEGIN INCLUDE FILE...ls_ssu_info.incl.pl1 */ 1 2 1 3 /****^ HISTORY COMMENTS: 1 4* 1) change(85-03-01,Coren), approve(87-06-25,MCR7679), audit(87-03-18,GDixon), 1 5* install(87-08-04,MR12.1-1056): 1 6* Initial coding. 1 7* 2) change(87-03-05,GDixon), approve(87-06-25,MCR7679), 1 8* audit(87-07-14,Parisek), install(87-08-04,MR12.1-1056): 1 9* A) Added info directories to ls_ssu_info structure. This allows them to 1 10* be changed while running in a test environment. 1 11* B) Add init(0) attribute to ls_ssu_info.n_endpoints. 1 12* 3) change(87-06-25,GDixon), approve(87-06-25,MCR7679), 1 13* audit(87-07-14,Parisek), install(87-08-04,MR12.1-1056): 1 14* Add ls_cp_info.flags.call_probe to allow debug_mode messages without 1 15* stopping in probe. 1 16* END HISTORY COMMENTS */ 1 17 1 18 /* defines the info structure used by the "login_server" subsystem */ 1 19 1 20 dcl ls_ssu_info_ptr pointer; 1 21 1 22 dcl 1 ls_ssu_info aligned based (ls_ssu_info_ptr), 1 23 2 version char (8), /* "lssiNNNN" */ 1 24 2 sci_ptr pointer, 1 25 2 answer_table_ptr pointer, 1 26 2 installation_parms_ptr pointer, 1 27 2 flags, 1 28 3 debug_mode bit (1) unaligned, /* "1"b => debugging environment */ 1 29 3 call_probe bit (1) unaligned, /* "1"b => call probe when control point reports error */ 1 30 3 trace bit (1) unaligned, /* "1"b => make tracing calls */ 1 31 3 pad bit (33) unaligned, 1 32 2 n_endpoints fixed bin init(0), /* number of endpoints for which service has been started */ 1 33 2 first_endpoint_ptr pointer, /* head of list of endpoint names */ 1 34 2 last_endpoint_ptr pointer, /* tail of list */ 1 35 2 login_info_dir char (168) unal, /* info dir for login requests */ 1 36 2 connect_info_dir char (168) unal; /* info dir for connect requests */ 1 37 1 38 dcl LS_SSU_INFO_V1 char (8) internal static options (constant) initial ("lssi0001"); 1 39 1 40 1 41 dcl ls_endpoint_listp pointer; 1 42 1 43 dcl 1 ls_endpoint_list based (ls_endpoint_listp) aligned, /* element in linked list of active endpoints */ 1 44 2 version char (8), /* "lselNNNN" */ 1 45 2 name char (32), /* name of endpoint as supplied to start_login_service request */ 1 46 2 prev_endpoint pointer, /* preceding entry in list */ 1 47 2 next_endpoint pointer, /* next endpoint in list */ 1 48 2 service_entries_ptr pointer, /* points to login_service_entries structure for this endpoint */ 1 49 2 restart_event_channel fixed bin (71), /* event channel for signalling new start_login_service on dormant endpoint */ 1 50 2 control_point_id bit (36), /* control point that listens on specified endpoint */ 1 51 2 n_connections fixed bin, /* number of connections created on this endpoint */ 1 52 2 flags, 1 53 3 awaiting_destruction bit (1) unaligned, /* "1"b => destroy control point when n_connections goes to 0 */ 1 54 3 mbz bit (35) unaligned; 1 55 1 56 dcl LS_ENDPOINT_LIST_V1 char (8) internal static options (constant) initial ("lsel0001"); 1 57 1 58 dcl LS_SS_VERSION char (4) internal static options (constant) initial ("1.0 "); 1 59 1 60 /* END INCLUDE FILE...ls_ssu_info.incl.pl1 */ 837 838 2 1 /* BEGIN INCLUDE FILE...ls_listen_info.incl.pl1 */ 2 2 2 3 /****^ HISTORY COMMENTS: 2 4* 1) change(85-04-01,Coren), approve(87-07-14,MCR7679), audit(87-03-18,GDixon), 2 5* install(87-08-04,MR12.1-1056): 2 6* Initial coding. 2 7* END HISTORY COMMENTS */ 2 8 2 9 /* This include file defines the info structure passed to login_server_$listen 2 10* when starting the control point that listens for incoming connections. 2 11**/ 2 12 2 13 dcl ls_listen_info_ptr pointer; 2 14 2 15 dcl 1 ls_listen_info aligned based (ls_listen_info_ptr), 2 16 2 version char (8), /* "lsliNNNN" */ 2 17 2 sci_ptr pointer, /* for use in ssu_ calls */ 2 18 2 ssu_info_ptr pointer, /* points to info for login server subsystem */ 2 19 2 endpoint_list_ptr pointer; /* points to entry describing this control point's endpoint */ 2 20 2 21 2 22 dcl LS_LISTEN_INFO_V1 char (8) internal static options (constant) initial ("lsli0001"); 2 23 2 24 /* END INCLUDE FILE...ls_listen_info.incl.pl1 */ 839 840 3 1 /* BEGIN INCLUDE FILE...ls_connection_desc.incl.pl1 */ 3 2 3 3 /****^ HISTORY COMMENTS: 3 4* 1) change(85-04-01,Coren), approve(87-07-14,MCR7679), audit(87-03-18,GDixon), 3 5* install(87-08-04,MR12.1-1056): 3 6* Initial coding. 3 7* 2) change(87-05-18,GDixon), approve(87-07-14,MCR7679), 3 8* audit(87-07-14,Parisek), install(87-08-04,MR12.1-1056): 3 9* Add minimum_ring element. 3 10* END HISTORY COMMENTS */ 3 11 3 12 /* This include file defines the info structure passed to the control point 3 13* that conducts the logn dialogue with a connection once it has been 3 14* established. 3 15**/ 3 16 3 17 dcl ls_connection_desc_ptr pointer; 3 18 3 19 dcl 1 ls_connection_desc aligned based (ls_connection_desc_ptr), 3 20 2 version char (8), /* "lscdNNNN" */ 3 21 2 name char (32), /* name of the connection */ 3 22 2 endpoint_name char (32), /* name of endpoint through which connection was made */ 3 23 2 io_module char (32), /* I/O module through which connection is attached */ 3 24 2 disconnect_event_channel fixed bin (71), /* event channel over which disconnects will be signalled */ 3 25 2 terminate_event_channel fixed bin (71), /* event channel over which process terminations will be signalled */ 3 26 2 service_entries_ptr pointer, /* points to list of network service entries */ 3 27 2 connection_info_ptr pointer, /* points to entity-specific connection info */ 3 28 2 connection_info_len fixed bin (18) unsigned, /* length of said info in words */ 3 29 2 connection_handle fixed bin (35), /* unique ID of connection */ 3 30 2 process_info_ptr pointer, /* points to ls_process_info */ 3 31 2 access_class_range (2) bit (72), /* min:max access class of the connection */ 3 32 2 minimum_ring fixed bin, /* min ring in which MNA connections works. */ 3 33 2 conn_pad fixed bin; 3 34 3 35 dcl LS_CONNECTION_DESC_V1 char (8) internal static options (constant) initial ("lscd0001"); 3 36 3 37 /* END INCLUDE FILE...ls_connection_desc.incl.pl1 */ 841 842 4 1 /* BEGIN INCLUDE FILE...ls_cp_info.incl.pl1 */ 4 2 4 3 /****^ HISTORY COMMENTS: 4 4* 1) change(85-04-01,Coren), approve(87-06-25,MCR7679), audit(87-03-05,GDixon), 4 5* install(87-08-04,MR12.1-1056): 4 6* Initial coding. 4 7* 2) change(87-03-05,GDixon), approve(87-06-25,MCR7679), 4 8* audit(87-07-14,Parisek), install(87-08-04,MR12.1-1056): 4 9* Add info directory paths to ls_cp_info structure. This allows them to 4 10* be changed while running in a test environment. 4 11* 3) change(87-06-25,GDixon), approve(87-06-25,MCR7679), 4 12* audit(87-07-14,Parisek), install(87-08-04,MR12.1-1056): 4 13* Add ls_cp_info.flags.call_probe to allow debug_mode messages without 4 14* stopping in probe. 4 15* END HISTORY COMMENTS */ 4 16 4 17 /* This include file describes the info structure passed to the initial 4 18* procedure of a login server control point that manages a particular 4 19* connection. 4 20**/ 4 21 4 22 dcl ls_cp_info_ptr pointer; 4 23 4 24 dcl 1 ls_cp_info aligned based (ls_cp_info_ptr), 4 25 2 version char (8), /* "lscpNNNN" */ 4 26 2 connection_desc_ptr pointer, /* points to ls_connection_desc */ 4 27 2 error_info_ptr pointer, /* pointer to ls_error_info structure */ 4 28 2 error_event_channel fixed bin (71), /* event channel for signalling errors in parent control point */ 4 29 2 connection_gone_event_channel fixed bin (71), /* event channel for telling parent that connection is gone */ 4 30 2 answer_table_ptr pointer, /* needed by validate_user_ */ 4 31 2 installation_parms_ptr pointer, /* likewise */ 4 32 2 flags, 4 33 3 debug_mode bit (1) unaligned, /* "1"b => debugging environment */ 4 34 3 call_probe bit (1) unaligned, /* "1"b => call probe when control point reports error */ 4 35 3 trace bit (1) unaligned, /* "1"b => make tracing calls */ 4 36 3 fault_recursion bit (1) unaligned, /* "1"b => cl_intermediary being entered for second time */ 4 37 3 no_io_switches bit (1) unaligned, /* "1"b => control point doesn't have separate I/O switches */ 4 38 3 pad bit (31) unaligned, 4 39 2 login_info_dir char (168) unal, /* info dir for login requests */ 4 40 2 connect_info_dir char (168) unal; /* info dir for connect requests */ 4 41 4 42 dcl LS_CP_INFO_V1 char (8) internal static options (constant) initial ("lscp0001"); 4 43 4 44 /* END INCLUDE FILE...ls_cp_info.incl.pl1 */ 843 844 5 1 /* BEGIN INCLUDE FILE...ls_error_info.incl.pl1 */ 5 2 5 3 /****^ HISTORY COMMENTS: 5 4* 1) change(85-04-01,Coren), approve(87-07-14,MCR7679), audit(87-03-18,GDixon), 5 5* install(87-08-04,MR12.1-1056): 5 6* Initial coding. 5 7* END HISTORY COMMENTS */ 5 8 5 9 /* This include file defines information to be passed by a login dialogue 5 10* control point to its parent in order for the latter to write an error 5 11* message. 5 12**/ 5 13 5 14 5 15 dcl ls_error_info_ptr pointer; 5 16 5 17 dcl 1 ls_error_info aligned based (ls_error_info_ptr), 5 18 2 version char (8), /* lseiNNNN */ 5 19 2 caller_name char (32), /* name of program that generated the error */ 5 20 2 reply_event_channel fixed bin (71), /* event channel over which to send wakeup after message has been printed */ 5 21 2 error_message_length fixed bin, /* length of significant part of error message */ 5 22 2 error_message char (256); 5 23 5 24 dcl LS_ERROR_INFO_V1 char (8) internal static options (constant) initial ("lsei0001"); 5 25 5 26 /* END INCLUDE FILE...ls_error_info.incl.pl1 */ 845 846 6 1 /* BEGIN INCLUDE FILE...login_service_entries.incl.pl1 */ 6 2 6 3 /****^ HISTORY COMMENTS: 6 4* 1) change(85-03-01,Coren), approve(87-07-13,MCR7679), audit(87-03-18,GDixon), 6 5* install(87-08-04,MR12.1-1056): 6 6* Initial coding. 6 7* 2) change(87-04-16,Brunelle), approve(87-07-13,MCR7679), 6 8* audit(87-07-13,Parisek), install(87-08-04,MR12.1-1056): 6 9* Add group_id parameter to the assign_connection entry. 6 10* 3) change(87-05-18,GDixon), approve(87-07-13,MCR7679), 6 11* audit(87-07-13,Parisek), install(87-08-04,MR12.1-1056): 6 12* A) Update calling sequence for .listen to add minimum_ring parameter. 6 13* B) Update calling sequence for .validate_user to remove 6 14* access_class_range parameter. 6 15* END HISTORY COMMENTS */ 6 16 6 17 /* This include file defines the entries to be returned by a call */ 6 18 /* net_info_$get_service_entries with a service type of "login_service". */ 6 19 6 20 /* format: style3,dclind5,idind25,insnl,ll79,comcol7 */ 6 21 6 22 dcl login_service_entries_ptr 6 23 pointer; 6 24 6 25 dcl 1 login_service_entries aligned based (login_service_entries_ptr), 6 26 /**/ 6 27 /* version: "lsveNNNN" */ 6 28 2 version char (8), 6 29 /**/ 6 30 /* listen (generic_connection_name, area_ptr, disconnect_event_channel */ 6 31 /* , connection_name, connection_handle, connection_info_ptr, */ 6 32 /* connection_info_length, attach_description, */ 6 33 /* access_class_range, minimum_ring, code) */ 6 34 2 listen variable 6 35 entry (char (*), ptr, fixed bin (71), char (*), 6 36 fixed bin (35), ptr, fixed bin (18) unsigned, 6 37 char (*) varying, (2) bit (72) aligned, 6 38 fixed bin, fixed bin (35)), 6 39 /**/ 6 40 /* stop_listen (endpoint_name, code) */ 6 41 2 stop_listen variable entry (char (*), fixed bin (35)), 6 42 /**/ 6 43 /* assign_connection (connection_name, connection_handle, process_id, */ 6 44 /* group_id, */ 6 45 /* initializer_handle, disconnect_event_channel, */ 6 46 /* terminate_event_channel, usage_type, code) */ 6 47 2 assign_connection variable 6 48 entry (char (*), fixed bin (35), 6 49 bit (36) aligned, char (32), bit (72) aligned, 6 50 fixed bin (71), fixed bin (71), fixed bin, 6 51 fixed bin (35)), 6 52 /**/ 6 53 /* unassign_connection (connection_name, connection_handle, */ 6 54 /* wakeup_message, code) */ 6 55 2 unassign_connection variable 6 56 entry (char (*), fixed bin (35), bit (72), 6 57 fixed bin (35)), 6 58 /**/ 6 59 /* disconnect (connection_name, connection_handle, wakeup_message, */ 6 60 /* code) */ 6 61 2 disconnect variable 6 62 entry (char (*), fixed bin (35), bit (72), 6 63 fixed bin (35)), 6 64 /**/ 6 65 /* force_disconnect (connection_name, connection_handle, code) */ 6 66 2 force_disconnect variable 6 67 entry (char (*), fixed bin (35), fixed bin (35)), 6 68 /**/ 6 69 /* validate_user (lscp_info_ptr, option_structure_ptr, */ 6 70 /* ls_process_info_ptr, code) */ 6 71 2 validate_user variable 6 72 entry (ptr, ptr, ptr, fixed bin (35)); 6 73 6 74 6 75 dcl LS_ENTRIES_V1 char (8) internal static 6 76 options (constant) initial ("lsve0001"); 6 77 6 78 /* END INCLUDE FILE...login_service_entries.incl.pl1 */ 847 848 7 1 /*----------BEGIN dsa_log_constants.incl.pl1---------------------------------*/ 7 2 7 3 /****^ HISTORY COMMENTS: 7 4* 1) change(85-12-01,Kissel), approve(87-07-13,MCR7679), 7 5* audit(87-03-13,GDixon), install(87-08-04,MR12.1-1056): 7 6* Initial coding. 7 7* END HISTORY COMMENTS */ 7 8 7 9 /* format: style3,linecom,ifthenstmt,indthenelse,^indnoniterdo,indnoniterend,initcol3,dclind5,idind32 */ 7 10 7 11 /*****************************************************************************/ 7 12 /* */ 7 13 /* If any changes are made to the entry_type, caller_type, or severity */ 7 14 /* constants, then dsa_log_manager_.pl1 must be updated. It keeps an */ 7 15 /* number of internal static tables which are dimensioned using these */ 7 16 /* constants. */ 7 17 /* */ 7 18 /*****************************************************************************/ 7 19 7 20 /* Types of entries to the dsa_log_manager_. */ 7 21 7 22 dcl AEP_ENTRY_TYPE fixed bin internal static options (constant) init (1); 7 23 dcl ERROR_ENTRY_TYPE fixed bin internal static options (constant) init (2); 7 24 dcl TRACE_ENTRY_TYPE fixed bin internal static options (constant) init (3); 7 25 7 26 /* Types of callers for logging purposes. */ 7 27 7 28 dcl CXI_CALLER_TYPE fixed bin internal static options (constant) init (1); 7 29 dcl SC_CALLER_TYPE fixed bin internal static options (constant) init (2); 7 30 dcl DSAC_CALLER_TYPE fixed bin internal static options (constant) init (3); 7 31 dcl UFT_USER_CALLER_TYPE fixed bin internal static options (constant) init (4); 7 32 dcl UFT_SYSTEM_CALLER_TYPE fixed bin internal static options (constant) init (5); 7 33 dcl TM_CALLER_TYPE fixed bin internal static options (constant) init (6); 7 34 dcl LS_CALLER_TYPE fixed bin internal static options (constant) init (7); 7 35 dcl USER_CALLER_TYPE fixed bin internal static options (constant) init (8); 7 36 7 37 /* Values for the severity parameter in the log. */ 7 38 7 39 dcl INFO_LOG_SEVERITY fixed bin internal static options (constant) init (0); 7 40 dcl WARN_LOG_SEVERITY fixed bin internal static options (constant) init (1); 7 41 dcl SERIOUS_LOG_SEVERITY fixed bin internal static options (constant) init (2); 7 42 dcl FATAL_LOG_SEVERITY fixed bin internal static options (constant) init (3); 7 43 7 44 /* Values for the classes of binary data that can be put into a log. */ 7 45 7 46 dcl AEP_BIN_DATA_CLASS char (16) varying internal static options (constant) init ("aep_record"); 7 47 dcl AEP_UNCONVERTED_DATA_CLASS char (16) varying internal static options (constant) init ("aep_unc_record"); 7 48 dcl DSA_BIN_DATA_CLASS char (16) varying internal static options (constant) init ("dsa_binary"); 7 49 7 50 /* Values for the AEP data types, for use by the conversion routine. */ 7 51 7 52 dcl AEP_NO_CONVERT_DATA_TYPE fixed bin internal static options (constant) init (-1); 7 53 7 54 /*----------END dsa_log_constants.incl.pl1-----------------------------------*/ 849 850 8 1 /* BEGIN INCLUDE FILE ... cpm_entries.incl.pl1 */ 8 2 8 3 /****^ HISTORY COMMENTS: 8 4* 1) change(86-08-12,Kissel), approve(86-08-12,MCR7473), 8 5* audit(86-10-08,Fawcett), install(86-11-03,MR12.0-1206): 8 6* Written to support control point management in March 1985 by G. Palter. 8 7* END HISTORY COMMENTS */ 8 8 8 9 /* format: style3,linecom */ 8 10 8 11 /* Control Point Manager (cpm_) entrypoint definitions */ 8 12 8 13 dcl get_control_point_id_ /* returns the ID of the currently running control point */ 8 14 entry () returns (bit (36) aligned); 8 15 8 16 dcl cpm_$create /* create a new control point */ 8 17 entry (pointer, bit (36) aligned, fixed binary (35)); 8 18 8 19 dcl ( 8 20 cpm_$destroy, /* destroy the specified control point */ 8 21 cpm_$start, /* start the specified control point if its stopped */ 8 22 cpm_$wakeup, /* make the specified control point ready if its blocked */ 8 23 cpm_$stop /* stop the specified control point if its ready or blocked */ 8 24 ) entry (bit (36) aligned, fixed binary (35)); 8 25 8 26 dcl cpm_$block entry (); /* block the current control point */ 8 27 8 28 dcl cpm_$scheduler entry (); /* find a runnable control point and let it run */ 8 29 8 30 dcl ( 8 31 cpm_$get_user_cl_intermediary, /* get the user supplied procedure to run during cu_$cl */ 8 32 cpm_$set_user_cl_intermediary /* set the user supplied procedure to run during cu_$cl */ 8 33 ) entry (bit (36) aligned, entry (bit (1) aligned), fixed binary (35)); 8 34 8 35 dcl ( 8 36 cpm_$generate_call, /* generate an immediate call */ 8 37 cpm_$generate_call_preferred, /* generate an immediate call and make it run preferred */ 8 38 cpm_$generate_call_when_ready /* generate a call when the control point is next ready */ 8 39 ) entry (bit (36) aligned, entry (pointer), pointer, fixed binary (35)); 8 40 8 41 dcl cpm_$get_preferred_control_point /* return the ID of the preferred control point */ 8 42 entry () returns (bit (36) aligned); 8 43 dcl cpm_$set_preferred_control_point /* make the specified control point preferred */ 8 44 entry (bit (36) aligned, fixed binary (35)); 8 45 dcl cpm_$push_preferred_control_point /* switch preferred control points */ 8 46 entry (bit (36) aligned, bit (1) aligned, fixed binary (35)); 8 47 dcl cpm_$pop_preferred_control_point /* restore the previous preferred control point */ 8 48 entry (bit (1) aligned); 8 49 8 50 dcl cpm_$get_control_point_meters /* get the usage meters for a specific control point */ 8 51 entry (bit (36) aligned, pointer, fixed binary (35)); 8 52 dcl cpm_$get_scheduler_meters /* get the usage meters for the control point scheduler */ 8 53 entry (pointer, fixed binary (35)); 8 54 8 55 dcl cpm_$nulle entry () options (variable); /* a "null" entry value which should never be called */ 8 56 8 57 /* END INCLUDE FILE ... cpm_entries.incl.pl1 */ 851 852 9 1 /* BEGIN INCLUDE FILE ... cpm_create_ctrl_pt_info.incl.pl1 */ 9 2 9 3 /****^ HISTORY COMMENTS: 9 4* 1) change(86-08-12,Kissel), approve(86-08-12,MCR7473), 9 5* audit(86-10-08,Fawcett), install(86-11-03,MR12.0-1206): 9 6* Written to support control point management in March 1985 by G. Palter. 9 7* END HISTORY COMMENTS */ 9 8 9 9 /* format: style3,linecom */ 9 10 9 11 /* Description of a new control point to be created by a call to cpm_$create */ 9 12 9 13 dcl 1 create_control_point_info 9 14 aligned based (ccpi_ptr), 9 15 2 header, 9 16 3 version character (8) unaligned, 9 17 3 comment character (64) unaligned, /* a description of the control point */ 9 18 3 initproc, /* definition of the first user code to be run */ 9 19 4 entry entry (pointer) variable, /* ... the actual program */ 9 20 4 info_ptr pointer, /* ... and its single parameter */ 9 21 3 user_cl_intermediary /* user program to be called by cpm_cl_intermediary_ */ 9 22 entry (bit (1) aligned) variable, 9 23 3 priority fixed binary, /* scheduling prioirty (1 is highest, 2 next, etc.) */ 9 24 3 flags, 9 25 4 independent bit (1) unaligned, /* ON => the new control point is standalone */ 9 26 /* OFF => the new control point belongs to the current one */ 9 27 4 separate_standard_iocbs /* ON => the new control point should have its own switches */ 9 28 bit (1) unaligned, /* OFF => the new control point shares its parent's */ 9 29 4 user_io_attach_desc_given /* ON => there is an attach description for user_i/o */ 9 30 bit (1) unaligned, /* OFF => user_i/o should be syn_'ed to the parent's */ 9 31 4 user_cl_intermediary_given /* ON => user has supplied a program to be called by ... */ 9 32 bit (1) unaligned, /* ... cpm_cl_intermediary_ before creating a new level */ 9 33 4 pad bit (32) unaligned, 9 34 3 pad bit (36) aligned, 9 35 3 user_io_attach_desc_length /* length of the user_i/o attach description (if present) */ 9 36 fixed binary (21), 9 37 2 user_io_attach_desc /* attach description for user_i/o */ 9 38 character (ccpi_user_io_attach_desc_length 9 39 refer (create_control_point_info.user_io_attach_desc_length)) unaligned; 9 40 9 41 dcl CREATE_CONTROL_POINT_INFO_VERSION_1 9 42 character (8) static options (constant) initial ("ccpi_001"); 9 43 9 44 dcl ccpi_user_io_attach_desc_length /* required to allocate the above structure */ 9 45 fixed binary (21); 9 46 dcl ccpi_ptr pointer; 9 47 9 48 /* END INCLUDE FILE ... cpm_create_ctrl_pt_info.incl.pl1 */ 853 854 10 1 /* BEGIN INCLUDE FILE event_call_info.incl.pl1 */ 10 2 10 3 /* T. Casey, May 1978 */ 10 4 10 5 dcl event_call_info_ptr ptr; 10 6 10 7 dcl 1 event_call_info aligned based (event_call_info_ptr), /* argument structure passed to event call procedure */ 10 8 2 channel_id fixed bin (71), /* event channel on which wakeup occurred */ 10 9 2 message fixed bin (71), /* 72 bits of information passed by sender of wakeup */ 10 10 2 sender bit (36), /* process id of sender */ 10 11 2 origin, 10 12 3 dev_signal bit (18) unaligned, /* "1"b if device signal */ 10 13 3 ring fixed bin (17) unaligned, /* ring from which sent */ 10 14 2 data_ptr ptr; /* ptr given to dcl_event_call_channel */ 10 15 10 16 /* END INCLUDE FILE event_call_info.incl.pl1 */ 855 856 11 1 /*----------BEGIN ipc_create_arg.incl.pl1------------------------------------*/ 11 2 11 3 /* 11 4* This include file declares the structure which is the input argument to 11 5* ipc_$create_event_channel. 11 6**/ 11 7 11 8 /****^ HISTORY COMMENTS: 11 9* 1) change(86-08-12,Kissel), approve(86-08-12,MCR7479), 11 10* audit(86-10-08,Fawcett), install(86-11-03,MR12.0-1206): 11 11* New include file added to support async event channels. 11 12* END HISTORY COMMENTS */ 11 13 11 14 /* format: style3,linecom,ifthenstmt,indthenelse,^indnoniterdo,indnoniterend,initcol3,dclind5,idind32 */ 11 15 11 16 dcl ipc_create_arg_structure_ptr ptr; 11 17 dcl ipc_create_arg_structure_v1 char (8) internal static options (constant) init ("ipcarg01"); 11 18 11 19 dcl 1 ipc_create_arg_structure aligned based (ipc_create_arg_structure_ptr), 11 20 2 version char (8) unaligned, /* From above. */ 11 21 2 channel_type fixed bin, /* See constants below. */ 11 22 2 call_entry variable entry (ptr), /* For event call channels -- who to call. */ 11 23 2 call_data_ptr ptr, /* For event call channels -- something to tell them. */ 11 24 2 call_priority fixed bin (17); /* For event call channels -- who's first? */ 11 25 11 26 /* Constants for the event channel type. */ 11 27 11 28 dcl FAST_EVENT_CHANNEL_TYPE fixed bin internal static options (constant) init (1); 11 29 dcl WAIT_EVENT_CHANNEL_TYPE fixed bin internal static options (constant) init (2); 11 30 dcl CALL_EVENT_CHANNEL_TYPE fixed bin internal static options (constant) init (3); 11 31 dcl ASYNC_CALL_EVENT_CHANNEL_TYPE fixed bin internal static options (constant) init (4); 11 32 11 33 dcl ANY_CALL_EVENT_CHANNEL_TYPE fixed bin internal static options (constant) init (10); 11 34 11 35 /*----------END ipc_create_arg.incl.pl1--------------------------------------*/ 857 858 12 1 /* BEGIN INCLUDE FILE ... event_wait_channel.incl.pl1 */ 12 2 12 3 /* ipc_$block wait list with one channel 12 4* 12 5* Written 9-May-79 by M. N. Davidoff. 12 6**/ 12 7 12 8 declare 1 event_wait_channel aligned, 12 9 2 n_channels fixed bin initial (1), /* number of channels */ 12 10 2 pad bit (36), 12 11 2 channel_id (1) fixed bin (71); /* event channel to wait on */ 12 12 12 13 /* END INCLUDE FILE ... event_wait_channel.incl.pl1 */ 859 860 861 end login_server_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/04/87 1222.2 login_server_.pl1 >special_ldd>install>MR12.1-1054>login_server_.pl1 837 1 08/04/87 1139.7 ls_ssu_info.incl.pl1 >spec>install>1056>ls_ssu_info.incl.pl1 839 2 08/04/87 1139.9 ls_listen_info.incl.pl1 >spec>install>1056>ls_listen_info.incl.pl1 841 3 08/04/87 1139.9 ls_connection_desc.incl.pl1 >spec>install>1056>ls_connection_desc.incl.pl1 843 4 08/04/87 1139.9 ls_cp_info.incl.pl1 >spec>install>1056>ls_cp_info.incl.pl1 845 5 08/04/87 1139.9 ls_error_info.incl.pl1 >spec>install>1056>ls_error_info.incl.pl1 847 6 08/04/87 1139.9 login_service_entries.incl.pl1 >spec>install>1056>login_service_entries.incl.pl1 849 7 08/04/87 1140.2 dsa_log_constants.incl.pl1 >spec>install>1056>dsa_log_constants.incl.pl1 851 8 11/07/86 1550.3 cpm_entries.incl.pl1 >ldd>include>cpm_entries.incl.pl1 853 9 11/07/86 1550.3 cpm_create_ctrl_pt_info.incl.pl1 >ldd>include>cpm_create_ctrl_pt_info.incl.pl1 855 10 06/29/79 1728.0 event_call_info.incl.pl1 >ldd>include>event_call_info.incl.pl1 857 11 11/07/86 1550.3 ipc_create_arg.incl.pl1 >ldd>include>ipc_create_arg.incl.pl1 859 12 06/29/79 1728.0 event_wait_channel.incl.pl1 >ldd>include>event_wait_channel.incl.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. CALL_EVENT_CHANNEL_TYPE constant fixed bin(17,0) initial dcl 11-30 ref 429 462 CREATE_CONTROL_POINT_INFO_VERSION_1 000002 constant char(8) initial unaligned dcl 9-41 ref 230 627 ERROR_PRIORITY constant fixed bin(17,0) initial dcl 148 ref 432 INFO_LOG_SEVERITY 000022 constant fixed bin(17,0) initial dcl 7-39 set ref 191* 293* 304* 516* 569* 584* 688* 777* 823* LISTEN_FAILURE_TIME_LIMIT 000022 constant fixed bin(71,0) initial dcl 151 ref 530 LS_CALLER_TYPE 000004 constant fixed bin(17,0) initial dcl 7-34 set ref 191* 293* 304* 516* 569* 584* 688* 777* 823* LS_CONNECTION_DESC_V1 000014 constant char(8) initial unaligned dcl 3-35 ref 588 LS_CP_INFO_V1 000012 constant char(8) initial unaligned dcl 4-42 ref 606 LS_ENDPOINT_LIST_V1 000020 constant char(8) initial unaligned dcl 1-56 ref 196 LS_ENTRIES_V1 000006 constant char(8) initial unaligned dcl 6-75 ref 452 LS_ERROR_INFO_V1 000010 constant char(8) initial unaligned dcl 5-24 ref 620 LS_LISTEN_INFO_V1 000016 constant char(8) initial unaligned dcl 2-22 ref 222 MAX_LISTEN_FAILURES constant fixed bin(17,0) initial dcl 150 ref 538 NORMAL_PRIORITY constant fixed bin(17,0) initial dcl 147 ref 465 OUR_NAME 000024 constant char(13) initial unaligned dcl 149 set ref 191* 293* 304* 337* 516* 569* 584* 688* 777* 823* WAIT_EVENT_CHANNEL_TYPE constant fixed bin(17,0) initial dcl 11-29 ref 442 476 498 a_info_ptr parameter pointer dcl 712 in procedure "Connection_gone_handler" ref 704 716 a_info_ptr parameter pointer dcl 66 in procedure "login_server_" ref 161 167 262 268 313 323 354 358 387 391 405 416 671 680 a_sci_ptr parameter pointer dcl 65 ref 161 166 262 267 313 322 354 357 387 390 access_class_range 46 based bit(72) array level 2 in structure "ls_connection_desc" dcl 3-19 in procedure "login_server_" set ref 599* access_class_range 000100 automatic bit(72) array dcl 71 in procedure "login_server_" set ref 509* 599 addr builtin function dcl 157 ref 434 434 443 443 466 466 477 477 499 499 557 557 af_sw 000104 automatic bit(1) dcl 72 set ref 360* 372 answer_table_ptr 12 based pointer level 2 in structure "ls_cp_info" dcl 4-24 in procedure "login_server_" set ref 613* answer_table_ptr 4 based pointer level 2 in structure "ls_ssu_info" dcl 1-22 in procedure "login_server_" ref 613 arg based char unaligned dcl 740 ref 749 arg_count 000105 automatic fixed bin(17,0) dcl 73 set ref 360* argl 000472 automatic fixed bin(21,0) dcl 739 set ref 747* 749 argp 000470 automatic pointer dcl 738 set ref 747* 749 attach_description 000106 automatic varying char(512) dcl 74 set ref 509* 591 591 612 624 635 642 auto_event_channel 000374 automatic structure level 1 dcl 101 set ref 557 557 auto_ipc_create_arg 000400 automatic structure level 1 dcl 103 set ref 434 434 443 443 466 466 477 477 499 499 awaiting_destruction 24 based bit(1) level 3 in structure "ls_endpoint_list" packed unaligned dcl 1-43 in procedure "login_server_" set ref 171 367 399* 555* 562* awaiting_destruction 24 based bit(1) level 3 in structure "ls_end_list" packed unaligned dcl 714 in procedure "Connection_gone_handler" ref 720 before builtin function dcl 157 ref 591 call_data_ptr 10 000400 automatic pointer level 2 dcl 103 set ref 431* 464* call_entry 4 000400 automatic entry variable level 2 dcl 103 set ref 430* 463* call_priority 12 000400 automatic fixed bin(17,0) level 2 dcl 103 set ref 432* 465* call_probe 16(01) based bit(1) level 3 packed unaligned dcl 4-24 set ref 693 caller_name 2 based char(32) level 2 dcl 5-17 set ref 622* 685* 688* ccpi_ptr 000442 automatic pointer dcl 9-46 set ref 184* 228* 230 231 233 234 235 236 237 238 240* 241 269* 420* 579* 625* 627 628 630 631 632 633 634 637 638 641 642 644* 645 781 781 820 820 ccpi_user_io_attach_desc_length 000440 automatic fixed bin(21,0) dcl 9-44 set ref 227* 228 228 624* 625 625 channel_id 2 000374 automatic fixed bin(71,0) array level 2 dcl 101 set ref 556* channel_type 2 000400 automatic fixed bin(17,0) level 2 dcl 103 set ref 429* 442* 462* 476* 498* cleanup 000414 stack reference condition dcl 159 ref 185 424 578 580 655 clock builtin function dcl 157 ref 529 code 000307 automatic fixed bin(35,0) dcl 75 set ref 174* 175 175* 240* 243 246* 250* 252 256* 283* 285 287* 291* 293* 302* 304* 434* 435 437* 443* 444 446* 454* 456 458* 466* 468 470* 477* 479 481* 499* 502 504* 509* 516* 520 525 527* 557* 644* 647 649* 656* 657 command_query_$yes_no 000012 constant entry external dcl 112 ref 337 comment 2 based char(64) level 3 packed unaligned dcl 9-13 set ref 231* 628* connect_info_dir 71 based char(168) level 2 in structure "ls_cp_info" packed unaligned dcl 4-24 in procedure "login_server_" set ref 616* connect_info_dir 70 based char(168) level 2 in structure "ls_ssu_info" packed unaligned dcl 1-22 in procedure "login_server_" ref 616 connection_desc_ptr 2 based pointer level 2 dcl 4-24 set ref 607* 683 connection_gone_event_channel 000310 automatic fixed bin(71,0) dcl 76 in procedure "login_server_" set ref 466* 609 connection_gone_event_channel 10 based fixed bin(71,0) level 2 in structure "ls_cp_info" dcl 4-24 in procedure "login_server_" set ref 609* connection_handle 43 based fixed bin(35,0) level 2 in structure "ls_connection_desc" dcl 3-19 in procedure "login_server_" set ref 594* connection_handle 000312 automatic fixed bin(35,0) dcl 77 in procedure "login_server_" set ref 509* 594 827* connection_info_len 42 based fixed bin(18,0) level 2 in structure "ls_connection_desc" unsigned dcl 3-19 in procedure "login_server_" set ref 598* connection_info_len 000313 automatic fixed bin(18,0) unsigned dcl 78 in procedure "login_server_" set ref 509* 598 connection_info_ptr 40 based pointer level 2 in structure "ls_connection_desc" dcl 3-19 in procedure "login_server_" set ref 597* connection_info_ptr 000314 automatic pointer dcl 79 in procedure "login_server_" set ref 509* 597 connection_name 000316 automatic char(32) unaligned dcl 80 set ref 509* 584* 589 628 649* 659* 823* 827* control_point_id 000326 automatic bit(36) dcl 81 in procedure "login_server_" set ref 644* 656* 661* control_point_id 22 based bit(36) level 2 in structure "ls_endpoint_list" dcl 1-43 in procedure "login_server_" set ref 199* 240* 250* 254* 291* 293* 300 302* 304* cpm_$create 000072 constant entry external dcl 8-16 ref 240 644 cpm_$destroy 000074 constant entry external dcl 8-19 ref 254 291 302 661 cpm_$start 000076 constant entry external dcl 8-19 ref 250 656 create_control_point_info based structure level 1 dcl 9-13 set ref 228 241 625 645 781 820 cur_ls_endpoint_listp 000464 automatic pointer dcl 736 set ref 755* 755* 759 762* 764 data_ptr 6 based pointer level 2 dcl 10-7 ref 717 disconnect 22 based entry variable level 2 dcl 6-25 ref 827 disconnect_event_channel 32 based fixed bin(71,0) level 2 in structure "ls_connection_desc" dcl 3-19 in procedure "login_server_" set ref 595* disconnect_event_channel 000330 automatic fixed bin(71,0) dcl 82 in procedure "login_server_" set ref 499* 509* 595 828* dsa_log_manager_$trace_message 000014 constant entry external dcl 113 ref 191 293 304 516 569 584 688 777 823 endpoint_list_ptr 6 based pointer level 2 dcl 2-15 set ref 225* 419 endpoint_name 12 based char(32) level 2 in structure "ls_connection_desc" dcl 3-19 in procedure "login_server_" set ref 590* endpoint_name 000332 automatic char(32) unaligned dcl 83 in procedure "login_server_" set ref 175* 180* 191* 197 231 246* 256* 273* 283* 287* 426* 454* 458* 470* 481* 504* 509* 516* 527* 544* 569* 590 749* 759 entry 22 based entry variable level 4 dcl 9-13 set ref 233* 630* ep_found 000342 automatic bit(1) unaligned dcl 84 set ref 169* 171 271* 273 error_event_channel 6 based fixed bin(71,0) level 2 dcl 4-24 set ref 608* error_info_ptr 4 based pointer level 2 dcl 4-24 set ref 619* 682 error_message 15 based char(256) level 2 dcl 5-17 set ref 622* 685 685 688 688 error_message_length 14 based fixed bin(17,0) level 2 dcl 5-17 ref 685 685 688 688 error_table_$listen_stopped 000062 external static fixed bin(35,0) dcl 135 ref 525 error_table_$wrong_no_of_args 000064 external static fixed bin(35,0) dcl 135 set ref 744* event_call_info based structure level 1 dcl 10-7 event_call_info_ptr 000444 automatic pointer dcl 10-5 set ref 680* 681 701 716* 717 event_wait_channel 000446 automatic structure level 1 dcl 12-8 event_wait_info_ptr 000344 automatic pointer dcl 85 set ref 557* first_endpoint_ptr 12 based pointer level 2 dcl 1-22 set ref 206* 331 365 397 755 791* flags 10 based structure level 2 in structure "ls_ssu_info" dcl 1-22 in procedure "login_server_" ref 611 flags 16 based structure level 2 in structure "ls_cp_info" dcl 4-24 in procedure "login_server_" set ref 610* 611* flags 24 based structure level 2 in structure "ls_end_list" dcl 714 in procedure "Connection_gone_handler" flags 35 based structure level 3 in structure "create_control_point_info" dcl 9-13 in procedure "login_server_" set ref 236* 633* flags 24 based structure level 2 in structure "ls_endpoint_list" dcl 1-43 in procedure "login_server_" found parameter bit(1) unaligned dcl 734 set ref 727 750* 755 761* get_control_point_id_ 000070 constant entry external dcl 8-13 ref 569 569 get_process_id_ 000016 constant entry external dcl 114 ref 174 get_system_free_area_ 000020 constant entry external dcl 115 ref 182 277 421 hcs_$wakeup 000022 constant entry external dcl 116 ref 174 701 header based structure level 2 dcl 9-13 independent 35 based bit(1) level 4 packed unaligned dcl 9-13 set ref 237* 634* info_ptr 26 based pointer level 4 dcl 9-13 set ref 234* 631* initproc 22 based structure level 3 dcl 9-13 installation_parms_ptr 6 based pointer level 2 in structure "ls_ssu_info" dcl 1-22 in procedure "login_server_" ref 614 installation_parms_ptr 14 based pointer level 2 in structure "ls_cp_info" dcl 4-24 in procedure "login_server_" set ref 614* io_module 22 based char(32) level 2 dcl 3-19 set ref 591* 593* ioa_ 000024 constant entry external dcl 117 ref 376 393 396 399 ioa_$ioa_switch 000026 constant entry external dcl 118 ref 685 695 iox_$error_output 000066 external static pointer dcl 140 set ref 685* 695* ipc_$block 000030 constant entry external dcl 119 ref 557 ipc_$create_event_channel 000032 constant entry external dcl 120 ref 434 443 466 477 499 ipc_$delete_ev_chn 000034 constant entry external dcl 121 ref 828 ipc_create_arg_structure based structure level 1 dcl 11-19 ipc_create_arg_structure_v1 000000 constant char(8) initial unaligned dcl 11-17 ref 428 last_endpoint_p 000346 automatic pointer dcl 86 set ref 211* 212 213 last_endpoint_ptr 14 based pointer level 2 dcl 1-22 set ref 204 206* 211 212* 795* last_listen_failure_time 000350 automatic fixed bin(71,0) dcl 87 set ref 494* 530 532* length builtin function dcl 157 ref 624 listen 2 based entry variable level 2 dcl 6-25 ref 509 login_info_dir 17 based char(168) level 2 in structure "ls_cp_info" packed unaligned dcl 4-24 in procedure "login_server_" set ref 615* login_info_dir 16 based char(168) level 2 in structure "ls_ssu_info" packed unaligned dcl 1-22 in procedure "login_server_" ref 615 login_server_$listen 000040 constant entry external dcl 123 ref 233 login_server_connection_ 000036 constant entry external dcl 122 ref 630 login_service_entries based structure level 1 dcl 6-25 set ref 451 799 login_service_entries_ptr 000436 automatic pointer dcl 6-22 set ref 276* 280 283 451* 452 454* 486 509 596 827 ls_connection_desc based structure level 1 dcl 3-19 set ref 582 830 ls_connection_desc_ptr 000430 automatic pointer dcl 3-17 set ref 579* 582* 584* 588 589 590 591 593 594 595 596 597 598 599 600 601 602 607 683* 685 688 823* 830 830 ls_cp_info based structure level 1 dcl 4-24 set ref 604 817 ls_cp_info_ptr 000432 automatic pointer dcl 4-22 set ref 579* 604* 606 607 608 609 610 611 612 613 614 615 616 619 631 681* 682 683 688 693 813 817 ls_end_list based structure level 1 dcl 714 ls_end_listp 000100 automatic pointer dcl 713 set ref 717* 719 719 720 720 ls_endpoint_list based structure level 1 dcl 1-43 set ref 189 195* 801 ls_endpoint_listp 000424 automatic pointer dcl 1-41 set ref 171 174 184* 189* 191* 195 196 197 198 199 200 206 207 212 213 225 240 250 254 269* 276 289 291 293 300 302 304 331* 331* 333 333* 335 365* 365* 367* 369 397* 397* 399 399 399* 401 419* 426 464 477 486 553 555 556 562 628 666 666 751* 762* 777 777* 787 790 791 793 795 797 799 799 801 ls_error_info based structure level 1 dcl 5-17 set ref 618 815 ls_error_info_ptr 000434 automatic pointer dcl 5-15 set ref 579* 618* 619 620 621 622 622 682* 685 685 685 685 685 688 688 688 688 688 701 815 815 ls_listen_info based structure level 1 dcl 2-15 set ref 220 784 ls_listen_info_ptr 000426 automatic pointer dcl 2-13 set ref 184* 220* 222 223 224 225 234 269* 416* 417 418 419 784 784 ls_ssu_info based structure level 1 dcl 1-22 ls_ssu_info_ptr 000422 automatic pointer dcl 1-20 set ref 167* 191 204 206 206 211 212 216 216 224 268* 293 304 323* 325 331 341* 358* 363 365 391* 393 397 418* 516 569 584 611 613 614 615 616 755 755 777 791 795 803 803 823 message 2 based fixed bin(71,0) level 2 dcl 10-7 ref 681 minimum_ring 000352 automatic fixed bin(17,0) dcl 88 in procedure "login_server_" set ref 509* 600 minimum_ring 52 based fixed bin(17,0) level 2 in structure "ls_connection_desc" dcl 3-19 in procedure "login_server_" set ref 600* n_channels 000374 automatic fixed bin(17,0) initial level 2 in structure "auto_event_channel" dcl 101 in procedure "login_server_" set ref 101* n_channels 000446 automatic fixed bin(17,0) initial level 2 in structure "event_wait_channel" dcl 12-8 in procedure "login_server_" set ref 12-8* n_connections 23 based fixed bin(17,0) level 2 in structure "ls_end_list" dcl 714 in procedure "Connection_gone_handler" set ref 719* 719 720 n_connections 23 based fixed bin(17,0) level 2 in structure "ls_endpoint_list" dcl 1-43 in procedure "login_server_" set ref 289 333* 399* 553 666* 666 n_endpoints 11 based fixed bin(17,0) initial level 2 dcl 1-22 set ref 216* 216 325 363 393 755 803* 803 n_listen_failures 000354 automatic fixed bin(17,0) dcl 90 set ref 496* 533* 538 540* 540 n_listening 000353 automatic fixed bin(17,0) dcl 89 set ref 362* 367* 367 372 376* 376 name 2 based char(32) level 2 in structure "ls_connection_desc" dcl 3-19 in procedure "login_server_" set ref 589* 685* 688* name 2 based char(32) level 2 in structure "ls_endpoint_list" dcl 1-43 in procedure "login_server_" set ref 197* 333* 399* 426 628 759 777* nargs 000466 automatic fixed bin(17,0) dcl 737 set ref 743* 744 net_info_$get_service_entries 000042 constant entry external dcl 124 ref 454 next_endpoint 14 based pointer level 2 dcl 1-43 set ref 198* 212* 335 369 401 764 791 793* 793 795 797 no_io_switches 16(04) based bit(1) level 3 packed unaligned dcl 4-24 set ref 612* null builtin function dcl 157 ref 182 184 191 191 198 200 204 207 269 277 280 293 293 304 304 331 365 397 420 421 431 516 516 569 569 579 584 584 602 688 688 751 755 777 777 781 784 787 791 795 799 813 815 820 823 823 830 pad 36 based bit(36) level 3 dcl 9-13 set ref 238* 641* prev_endpoint 12 based pointer level 2 dcl 1-43 set ref 207* 213* 790 797* prev_ptr 000100 automatic pointer dcl 775 set ref 790* 791 793 795 797 print_error_event_channel 000356 automatic fixed bin(71,0) dcl 91 set ref 434* 608 priority 34 based fixed bin(17,0) level 3 dcl 9-13 set ref 235* 632* probe 000044 constant entry external dcl 125 ref 696 process_info_ptr 44 based pointer level 2 dcl 3-19 set ref 602* quit_ok 000360 automatic bit(1) unaligned dcl 92 set ref 325* 337* 341 reply_error_event_channel 000362 automatic fixed bin(71,0) dcl 93 set ref 443* 621 reply_event_channel 12 based fixed bin(71,0) level 2 dcl 5-17 set ref 621* 701* restart_event_channel 20 based fixed bin(71,0) level 2 dcl 1-43 set ref 174* 477* 556 rtrim builtin function dcl 157 ref 231 624 628 628 rv based varying char dcl 107 set ref 372* 375* rv_len 000364 automatic fixed bin(21,0) dcl 94 set ref 360* 372 375 rv_ptr 000366 automatic pointer dcl 95 set ref 360* 372 375 sci_ptr 000370 automatic pointer dcl 96 in procedure "login_server_" set ref 166* 175* 180* 223 246* 256* 267* 273* 287* 322* 329* 333* 341* 343* 357* 360* 390* 417* 437* 446* 458* 470* 481* 504* 527* 544* 649* 659* 743* 744* 747* sci_ptr 2 based pointer level 2 in structure "ls_listen_info" dcl 2-15 in procedure "login_server_" set ref 223* 417 sender 4 based bit(36) level 2 dcl 10-7 set ref 701* separate_standard_iocbs 35(01) based bit(1) level 4 packed unaligned dcl 9-13 set ref 637* service_entries_ptr 16 based pointer level 2 in structure "ls_endpoint_list" dcl 1-43 in procedure "login_server_" set ref 200* 276 486* 799 799 service_entries_ptr 36 based pointer level 2 in structure "ls_connection_desc" dcl 3-19 in procedure "login_server_" set ref 596* ssu_$abort_line 000052 constant entry external dcl 128 ref 175 180 246 256 273 744 ssu_$arg_count 000046 constant entry external dcl 126 ref 743 ssu_$arg_ptr 000050 constant entry external dcl 127 ref 747 ssu_$print_message 000054 constant entry external dcl 129 ref 287 329 333 343 437 446 458 470 481 504 527 544 649 659 ssu_$return_arg 000056 constant entry external dcl 130 ref 360 ssu_info_ptr 4 based pointer level 2 dcl 2-15 set ref 224* 418 ssu_requests_$quit 000060 constant entry external dcl 131 ref 341 stop_listen 6 based entry variable level 2 dcl 6-25 ref 283 string builtin function dcl 157 set ref 236* 610* 633* substr builtin function dcl 157 ref 685 685 688 688 system_area based area(1024) dcl 108 ref 189 220 228 241 451 582 604 618 625 645 781 784 799 801 815 817 820 830 system_areap 000010 internal static pointer initial dcl 145 set ref 182 182* 189 220 228 241 277 277* 421 421* 451 509* 582 604 618 625 645 781 784 799 801 815 817 820 830 terminate_event_channel 34 based fixed bin(71,0) level 2 dcl 3-19 set ref 601* time_now 000372 automatic fixed bin(71,0) dcl 97 set ref 529* 530 532 trace 16(02) based bit(1) level 3 in structure "ls_cp_info" packed unaligned dcl 4-24 in procedure "login_server_" set ref 688 trace 10(02) based bit(1) level 3 in structure "ls_ssu_info" packed unaligned dcl 1-22 in procedure "login_server_" ref 191 293 304 516 569 584 777 823 unspec builtin function dcl 157 set ref 195* 681* 681 user_io_attach_desc 40 based char level 2 packed unaligned dcl 9-13 set ref 642* user_io_attach_desc_given 35(02) based bit(1) level 4 packed unaligned dcl 9-13 set ref 638* user_io_attach_desc_length 37 based fixed bin(21,0) level 3 dcl 9-13 set ref 228* 241 625* 642 645 781 820 version based char(8) level 2 in structure "ls_connection_desc" dcl 3-19 in procedure "login_server_" set ref 588* version based char(8) level 2 in structure "login_service_entries" dcl 6-25 in procedure "login_server_" set ref 452* version based char(8) level 2 in structure "ls_error_info" dcl 5-17 in procedure "login_server_" set ref 620* version based char(8) level 2 in structure "ls_endpoint_list" dcl 1-43 in procedure "login_server_" set ref 196* version based char(8) level 3 in structure "create_control_point_info" packed unaligned dcl 9-13 in procedure "login_server_" set ref 230* 627* version based char(8) level 2 in structure "ls_listen_info" dcl 2-15 in procedure "login_server_" set ref 222* version based char(8) level 2 in structure "ls_cp_info" dcl 4-24 in procedure "login_server_" set ref 606* version 000400 automatic char(8) level 2 in structure "auto_ipc_create_arg" packed unaligned dcl 103 in procedure "login_server_" set ref 428* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. AEP_BIN_DATA_CLASS internal static varying char(16) initial dcl 7-46 AEP_ENTRY_TYPE internal static fixed bin(17,0) initial dcl 7-22 AEP_NO_CONVERT_DATA_TYPE internal static fixed bin(17,0) initial dcl 7-52 AEP_UNCONVERTED_DATA_CLASS internal static varying char(16) initial dcl 7-47 ANY_CALL_EVENT_CHANNEL_TYPE internal static fixed bin(17,0) initial dcl 11-33 ASYNC_CALL_EVENT_CHANNEL_TYPE internal static fixed bin(17,0) initial dcl 11-31 CXI_CALLER_TYPE internal static fixed bin(17,0) initial dcl 7-28 DSAC_CALLER_TYPE internal static fixed bin(17,0) initial dcl 7-30 DSA_BIN_DATA_CLASS internal static varying char(16) initial dcl 7-48 ERROR_ENTRY_TYPE internal static fixed bin(17,0) initial dcl 7-23 FAST_EVENT_CHANNEL_TYPE internal static fixed bin(17,0) initial dcl 11-28 FATAL_LOG_SEVERITY internal static fixed bin(17,0) initial dcl 7-42 LS_SSU_INFO_V1 internal static char(8) initial unaligned dcl 1-38 LS_SS_VERSION internal static char(4) initial unaligned dcl 1-58 SC_CALLER_TYPE internal static fixed bin(17,0) initial dcl 7-29 SERIOUS_LOG_SEVERITY internal static fixed bin(17,0) initial dcl 7-41 TM_CALLER_TYPE internal static fixed bin(17,0) initial dcl 7-33 TRACE_ENTRY_TYPE internal static fixed bin(17,0) initial dcl 7-24 UFT_SYSTEM_CALLER_TYPE internal static fixed bin(17,0) initial dcl 7-32 UFT_USER_CALLER_TYPE internal static fixed bin(17,0) initial dcl 7-31 USER_CALLER_TYPE internal static fixed bin(17,0) initial dcl 7-35 WARN_LOG_SEVERITY internal static fixed bin(17,0) initial dcl 7-40 cpm_$block 000000 constant entry external dcl 8-26 cpm_$generate_call 000000 constant entry external dcl 8-35 cpm_$generate_call_preferred 000000 constant entry external dcl 8-35 cpm_$generate_call_when_ready 000000 constant entry external dcl 8-35 cpm_$get_control_point_meters 000000 constant entry external dcl 8-50 cpm_$get_preferred_control_point 000000 constant entry external dcl 8-41 cpm_$get_scheduler_meters 000000 constant entry external dcl 8-52 cpm_$get_user_cl_intermediary 000000 constant entry external dcl 8-30 cpm_$nulle 000000 constant entry external dcl 8-55 cpm_$pop_preferred_control_point 000000 constant entry external dcl 8-47 cpm_$push_preferred_control_point 000000 constant entry external dcl 8-45 cpm_$scheduler 000000 constant entry external dcl 8-28 cpm_$set_preferred_control_point 000000 constant entry external dcl 8-43 cpm_$set_user_cl_intermediary 000000 constant entry external dcl 8-30 cpm_$stop 000000 constant entry external dcl 8-19 cpm_$wakeup 000000 constant entry external dcl 8-19 ipc_create_arg_structure_ptr automatic pointer dcl 11-16 NAMES DECLARED BY EXPLICIT CONTEXT. CALL_LISTEN 003313 constant label dcl 494 ref 564 669 Connection_gone_handler 005120 constant entry internal dcl 704 ref 463 DESTROY_CP 003710 constant label dcl 567 ref 720 RETRY_LISTEN 003374 constant label dcl 509 ref 534 541 Remove_connection 005476 constant entry internal dcl 808 ref 580 651 663 Remove_endpoint 005302 constant entry internal dcl 770 ref 185 245 255 308 424 438 447 459 472 482 505 567 Setup 005147 constant entry internal dcl 727 ref 169 271 endpoints_listening 002326 constant entry external dcl 354 error_message_handler 004644 constant entry external dcl 671 ref 430 list_endpoints 002474 constant entry external dcl 387 listen 002617 constant entry external dcl 405 login_server_ 000664 constant entry external dcl 53 quit 002073 constant entry external dcl 313 start_service 000677 constant entry external dcl 161 stop_service 001512 constant entry external dcl 262 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 6376 6476 5707 6406 Length 7260 5707 100 546 467 2 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME login_server_ 495 external procedure is an external procedure. on unit on line 185 64 on unit on unit on line 424 64 on unit on unit on line 580 64 on unit Connection_gone_handler 66 internal procedure is assigned to an entry variable. Setup internal procedure shares stack frame of external procedure login_server_. Remove_endpoint 122 internal procedure is called by several nonquick procedures. Remove_connection 120 internal procedure is called by several nonquick procedures. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 system_areap login_server_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME Connection_gone_handler 000100 ls_end_listp Connection_gone_handler Remove_endpoint 000100 prev_ptr Remove_endpoint login_server_ 000100 access_class_range login_server_ 000104 af_sw login_server_ 000105 arg_count login_server_ 000106 attach_description login_server_ 000307 code login_server_ 000310 connection_gone_event_channel login_server_ 000312 connection_handle login_server_ 000313 connection_info_len login_server_ 000314 connection_info_ptr login_server_ 000316 connection_name login_server_ 000326 control_point_id login_server_ 000330 disconnect_event_channel login_server_ 000332 endpoint_name login_server_ 000342 ep_found login_server_ 000344 event_wait_info_ptr login_server_ 000346 last_endpoint_p login_server_ 000350 last_listen_failure_time login_server_ 000352 minimum_ring login_server_ 000353 n_listening login_server_ 000354 n_listen_failures login_server_ 000356 print_error_event_channel login_server_ 000360 quit_ok login_server_ 000362 reply_error_event_channel login_server_ 000364 rv_len login_server_ 000366 rv_ptr login_server_ 000370 sci_ptr login_server_ 000372 time_now login_server_ 000374 auto_event_channel login_server_ 000400 auto_ipc_create_arg login_server_ 000422 ls_ssu_info_ptr login_server_ 000424 ls_endpoint_listp login_server_ 000426 ls_listen_info_ptr login_server_ 000430 ls_connection_desc_ptr login_server_ 000432 ls_cp_info_ptr login_server_ 000434 ls_error_info_ptr login_server_ 000436 login_service_entries_ptr login_server_ 000440 ccpi_user_io_attach_desc_length login_server_ 000442 ccpi_ptr login_server_ 000444 event_call_info_ptr login_server_ 000446 event_wait_channel login_server_ 000464 cur_ls_endpoint_listp Setup 000466 nargs Setup 000470 argp Setup 000472 argl Setup THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as alloc_char_temp cat_realloc_chars call_ent_var_desc call_ext_out_desc call_ext_out call_int_this call_int_other return_mac tra_ext_1 enable_op shorten_stack ext_entry int_entry op_alloc_ op_freen_ clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. command_query_$yes_no cpm_$create cpm_$destroy cpm_$start dsa_log_manager_$trace_message get_control_point_id_ get_process_id_ get_system_free_area_ hcs_$wakeup ioa_ ioa_$ioa_switch ipc_$block ipc_$create_event_channel ipc_$delete_ev_chn login_server_$listen login_server_connection_ net_info_$get_service_entries probe ssu_$abort_line ssu_$arg_count ssu_$arg_ptr ssu_$print_message ssu_$return_arg ssu_requests_$quit THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$listen_stopped error_table_$wrong_no_of_args iox_$error_output LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 101 000656 12 8 000660 53 000663 56 000672 161 000673 166 000710 167 000714 169 000717 171 000721 174 000730 175 000761 177 001013 180 001014 182 001045 184 001060 185 001064 189 001106 191 001114 195 001201 196 001205 197 001210 198 001213 199 001215 200 001216 204 001217 206 001223 207 001225 208 001230 211 001231 212 001233 213 001235 216 001237 220 001240 222 001246 223 001251 224 001253 225 001255 227 001257 228 001260 230 001273 231 001276 233 001325 234 001333 235 001335 236 001337 237 001340 238 001342 240 001343 241 001356 243 001365 245 001367 246 001373 247 001423 250 001424 252 001436 254 001440 255 001453 256 001457 260 001507 262 001510 267 001523 268 001527 269 001532 271 001536 273 001540 276 001574 277 001577 280 001612 283 001616 285 001633 287 001635 289 001665 291 001670 293 001701 298 001764 300 001765 302 001770 304 002001 308 002064 311 002070 313 002071 322 002104 323 002110 325 002113 329 002120 331 002145 333 002154 335 002212 337 002216 341 002261 343 002276 346 002323 354 002324 357 002337 358 002343 360 002346 362 002365 363 002366 365 002371 367 002400 369 002405 372 002410 375 002427 376 002441 378 002471 387 002472 390 002505 391 002511 393 002514 396 002533 397 002547 399 002556 401 002607 403 002613 405 002614 416 002630 417 002633 418 002635 419 002637 420 002641 421 002643 424 002655 426 002677 428 002703 429 002705 430 002707 431 002713 432 002715 434 002717 435 002734 437 002736 438 002762 439 002766 442 002767 443 002771 444 003006 446 003010 447 003034 448 003040 451 003041 452 003047 454 003052 456 003105 458 003107 459 003137 460 003143 462 003144 463 003146 464 003151 465 003153 466 003155 468 003172 470 003174 472 003224 473 003230 476 003231 477 003233 479 003251 481 003253 482 003303 483 003307 486 003310 494 003313 496 003315 498 003316 499 003320 502 003335 504 003337 505 003367 506 003373 509 003374 516 003453 520 003540 525 003542 527 003545 529 003574 530 003576 532 003601 533 003603 534 003605 538 003606 540 003611 541 003612 544 003613 553 003644 555 003647 556 003651 557 003667 562 003704 564 003707 567 003710 569 003714 573 004011 578 004012 579 004013 580 004020 582 004042 584 004050 588 004135 589 004141 590 004144 591 004147 593 004166 594 004171 595 004173 596 004175 597 004177 598 004201 599 004203 600 004211 601 004213 602 004215 604 004217 606 004225 607 004230 608 004232 609 004234 610 004236 611 004237 612 004261 613 004272 614 004274 615 004276 616 004301 618 004304 619 004312 620 004314 621 004317 622 004321 624 004327 625 004342 627 004355 628 004360 630 004444 631 004452 632 004454 633 004456 634 004457 635 004461 637 004466 638 004470 641 004472 642 004473 644 004500 645 004512 647 004521 649 004523 651 004553 652 004557 655 004560 656 004561 657 004572 659 004574 661 004620 663 004632 664 004636 666 004637 669 004641 671 004642 680 004655 681 004660 682 004663 683 004666 685 004671 688 004734 693 005042 695 005047 696 005067 701 005074 702 005116 704 005117 716 005125 717 005132 719 005134 720 005136 724 005146 727 005147 743 005151 744 005162 747 005211 749 005230 750 005235 751 005242 755 005244 759 005264 761 005271 762 005274 764 005275 766 005300 770 005301 777 005307 781 005375 784 005411 787 005420 790 005425 791 005430 793 005441 795 005444 797 005454 799 005456 801 005465 803 005470 804 005474 808 005475 813 005503 815 005510 817 005516 820 005521 823 005535 827 005623 828 005653 830 005666 833 005675 ----------------------------------------------------------- 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