COMPILATION LISTING OF SEGMENT dial_manager_ 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 1647.1 mst Tue Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 /* format: style4 */ 11 12 /* DIAL_MANAGER_ - This subroutine is the user interface to the answering service 13* dial facility. 14* 15* Written 750324 by Paul Green 16* Modified 03/18/76 by David Jordan for Auto Call. 17* Modified 11/9/76 by S.T. Kent to allow selective release of dialed channels. 18* and to accept request to become a registered dial server. 19* Modified April 1979 by Larry Johnson for release_channel_no_hangup 20* Modified November 1980 by E.N.Kittlitz for version_2 requests, 21* release_dial_id. 22* Modified March 1981 by Robert Coren to add tandd_attach and release_channel_no_listen entry points 23* Modified May 1983 by E. N. Kittlitz for version_3: access_class. 24* Modified 84-04-04 by BIM for version_4: privileged_server. 25* Modified 84-11-06 by E. Swenson to recompile after include file changes. 26**/ 27 28 allow_dials: 29 procedure (bv_request_ptr, bv_code); 30 31 /* parameters */ 32 33 dcl (bv_request_ptr ptr, 34 bv_code fixed bin (35) 35 ) parameter; 36 37 /* automatic */ 38 39 dcl dial_control_process bit (36) aligned, 40 ldx fixed bin, 41 i fixed bin, 42 dial_control_channel fixed bin (71), 43 request_mseg_dir char (168), 44 request_mseg char (32), 45 code fixed bin (35), 46 hangup_channel bit (1), 47 dont_listen bit (1), 48 tandd bit (1), 49 sub_string char (168), 50 reservation_string char (168), 51 release_dial_id_sw bit (1) aligned, 52 request_uid bit (72) aligned; 53 54 dcl 1 dial_rq aligned like dial_server_request; 55 56 dcl 1 wait_list aligned, /* channels to block on */ 57 2 n_channels fixed bin, 58 2 pad bit (36), 59 2 channel_id (1) fixed bin (71); 60 61 dcl 1 reply aligned, /* filled in by ipc_$block */ 62 2 channel_id fixed bin (71), 63 2 message fixed bin (71), 64 2 sending_process bit (36) aligned, 65 2 origin bit (36) aligned, 66 2 channel_index fixed bin; 67 68 /* conditions */ 69 70 dcl conversion condition; 71 72 /* external static */ 73 74 dcl (error_table_$action_not_performed, 75 error_table_$bad_conversion, 76 error_table_$invalid_line_type, 77 error_table_$bad_arg, 78 error_table_$unimplemented_version) fixed bin (35) external static; 79 80 /* entries */ 81 82 dcl system_info_$request_chn entry (bit (36) aligned, fixed bin (71), char (*), char (*)), 83 hcs_$wakeup entry (bit (36) aligned, fixed bin (71), bit (72) aligned, fixed bin (35)), 84 message_segment_$add_file entry (char (*), char (*), ptr, fixed bin (18), bit (72) aligned, fixed bin (35)), 85 ipc_$block entry (ptr, ptr, fixed bin (35)), 86 convert_ipc_code_ entry (fixed bin (35)), 87 convert_dial_message_ entry (fixed bin (71), char (*), char (*), fixed bin, bit (36) aligned, fixed bin (35)); 88 89 /* builtins */ 90 91 dcl (addr, after, before, convert, hbound, lbound, ltrim, size, string, substr) builtin; 92 93 /* include files */ 94 1 1 /* BEGIN INCLUDE FILE ... dial_manager_arg.incl.pl1 */ 1 2 1 3 /* Modified by E. N. Kittlitz 11/80 to add reservation string, move dial-out 1 4* destination from dial_qualifier, add dial_message. 1 5* Modified by Robert Coren 4/83 to add required access class stuff. 1 6* Modified 1984-08-27 BIM for V4, privileged_operation. 1 7**/ 1 8 1 9 1 10 dcl dial_manager_arg_version_2 fixed bin internal static initial (2) options (constant); 1 11 dcl dial_manager_arg_version_3 fixed bin internal static initial (3) options (constant); 1 12 dcl dial_manager_arg_version_4 fixed bin internal static initial (4) options (constant); 1 13 1 14 dcl 1 dial_manager_arg based aligned, 1 15 2 version fixed bin, /* = 4 */ 1 16 2 dial_qualifier char (22), /* identify different processes with same process group id */ 1 17 2 dial_channel fixed bin (71), /* event wait channel */ 1 18 2 channel_name char (32), /* channel name for privileged attach */ 1 19 /* limit of version 1 structure */ 1 20 2 dial_out_destination char (32), /* dial-out destination (e.g. phone_no) */ 1 21 2 reservation_string char (256), /* reservation string */ 1 22 2 dial_message fixed bin (71), /* OUTPUT: A.S. message received by dial_manager_ */ 1 23 /* limit of version 2 structure */ 1 24 2 access_class bit (72), /* access class to be associated with the attachment */ 1 25 2 flags aligned, 1 26 3 access_class_required bit (1) unaligned, /* indicates whether to enforce access_class */ 1 27 3 privileged_operation bit (1) unaligned, /* for accept_dials, accepts dials from */ 1 28 /* system_low:access_class */ 1 29 /* no effect on other operations yet. */ 1 30 3 mbz bit (34) unaligned; /* must be zero */ 1 31 1 32 /* END INCLUDE FILE ... dial_manager_arg.incl.pl1 */ 95 2 1 /* BEGIN INCLUDE FILE ... as_request_header.incl.pl1 */ 2 2 2 3 /* DESCRIPTION: 2 4* Answering Service request information. 2 5**/ 2 6 2 7 2 8 /****^ HISTORY COMMENTS: 2 9* 1) change(00-01-01,JRandom), approve(), audit(), install(): 2 10* Written by someone, at sometime. 2 11* 2) change(84-09-10,Tague), approve(), audit(), install(): 2 12* R. Michael Tague: Added ASR_BUMP_USER request. 2 13* 3) change(84-10-04,Margulies), approve(), audit(), install(): 2 14* BIM: ASR_ADMIN_COMMAND. 2 15* 4) change(85-01-23,Swenson), approve(), audit(), install(): 2 16* E. Swenson for ASR_NOTE_PNT_CHANGE. 2 17* 5) change(85-02-18,Margulies), approve(), audit(), install(): 2 18* BIM: ASR_DAEMON_COMMAND, ASR_COM_CHANNEL_INFO 2 19* 6) change(85-12-12,Lippard), approve(85-12-30,MCR7326), 2 20* audit(86-10-27,GDixon), install(86-10-28,MR12.0-1200): 2 21* Jim Lippard: Added ASR_ABS_COMMAND request. 2 22* END HISTORY COMMENTS */ 2 23 2 24 2 25 /* format: style4 */ 2 26 2 27 dcl as_request_version_1 fixed bin internal static initial (1) options (constant); 2 28 2 29 dcl ( 2 30 ASR_FIRST_TYPE initial (1), 2 31 ASR_DIAL_SERVER initial (1), 2 32 ASR_DIAL_OUT initial (2), 2 33 ASR_FPE_CAUSES_LOGOUT initial (3), 2 34 ASR_FPE_CAUSES_NEW_PROC initial (4), 2 35 ASR_PROC_TERM_NOTIFY initial (5), 2 36 ASR_BUMP_USER initial (6), 2 37 ASR_ADMIN_COMMAND initial (7), 2 38 ASR_NOTE_PNT_CHANGE initial (8), 2 39 ASR_DAEMON_COMMAND initial (9), 2 40 ASR_COM_CHANNEL_INFO initial (10), 2 41 ASR_ABS_COMMAND initial (11), 2 42 ASR_LAST_TYPE initial (11) 2 43 ) fixed bin internal static options (constant); 2 44 2 45 dcl ASR_DEFER_IN_ADMIN_MODE (1:11) bit (1) int static options (constant) 2 46 init ((6) (1) "0"b, "1"b, (4) (1) "0"b); 2 47 2 48 dcl ASR_REQUEST_NAMES (1:11) int static options (constant) 2 49 char (40) init ( 2 50 "Dial request", 2 51 "Dial out request", 2 52 "Logout on fatal process error", 2 53 "New process on fatal process error", 2 54 "Monitor process terminations", 2 55 "Bump user", 2 56 "Execute admin command", 2 57 "Note PNT change", 2 58 "Daemon command", 2 59 "Communications channel info", 2 60 "Absentee command"); 2 61 2 62 dcl 1 as_request_header based aligned, 2 63 2 version fixed bin, /* version number */ 2 64 2 type fixed bin, /* what to do */ 2 65 2 reply_channel fixed bin (71); /* who to tell */ 2 66 2 67 2 68 /* END INCLUDE FILE ... as_request_header.incl.pl1 */ 96 3 1 /* BEGIN INCLUDE FILE ... dial_server_request.incl.pl1 */ 3 2 3 3 /* This include file declares the data structure to be 3 4* passed to the dial facility to allow a process 3 5* to accept dials. 3 6**/ 3 7 /* Modified 11-9-76 by S.T. Kent to add selective channel release flag 3 8* and registered dial server flag 3 9* Modified April 1979 by Larry Johnson for no_hangup option on release channel 3 10* Modified November 1980 by E.N. Kittlitz for baud rate, line server 3 11* type, and to separate dial_out_destination from dial_qualifier 3 12* Modified March 1981 by Robert Coren to add tandd_attach and no_listen bits 3 13* Modified April 1983 by E. N. Kittlitz for access_class. 3 14* Moodified 84-04-04 BIM for privileged_server. 3 15**/ 3 16 3 17 dcl request_ptr ptr; 3 18 3 19 dcl dial_server_request_version_4 fixed bin internal static initial (4); 3 20 3 21 dcl 1 dial_server_request aligned based (request_ptr), 3 22 2 header like as_request_header, /* std header */ 3 23 2 version fixed bin, /* version of this structure */ 3 24 2 dial_control_channel fixed bin (71), /* send dial acknowledgements here */ 3 25 2 dial_qualifier char (22), /* dial qualifier name to use */ 3 26 2 channel_name char (32), /* channel to attach (may have * convention) */ 3 27 2 dial_out_destination char (32), /* phone-no, etc. for dial out */ 3 28 2 baud_rate fixed bin, /* baud rate required */ 3 29 2 line_type fixed bin, /* line type (protocol) required */ 3 30 2 server_type char (32), /* expansion... */ 3 31 2 flags aligned, /* control flags */ 3 32 3 start bit (1) unaligned, /* start as server */ 3 33 3 stop bit (1) unaligned, /* stop as server */ 3 34 3 privileged_attach bit (1) unaligned, /* grab channel */ 3 35 3 release_channel bit (1) unaligned, /* release this channel */ 3 36 3 registered_server bit (1) unaligned, /* request to become a dial server with a registered qualifier */ 3 37 3 no_hangup bit (1) unaligned, /* release channel without hanging it up */ 3 38 3 release_dial_id bit (1) unaligned, /* stop as dial server, but keep current dial-ups */ 3 39 3 tandd_attach bit (1) unaligned, /* grab channel and force it not to listen */ 3 40 3 no_listen bit (1) unaligned, /* don't listen again at release */ 3 41 3 access_class_specified bit (1) unaligned, /* access_class is valid */ 3 42 3 privileged_server bit (1) unaligned, /* allow_dials/registered_server of range */ 3 43 3 pad bit (25) unaligned, 3 44 2 access_class bit (72); 3 45 3 46 3 47 /* END INCLUDE FILE ... dial_server_request.incl.pl1 */ 97 4 1 /* BEGIN INCLUDE FILE ... line_types.incl.pl1 */ 4 2 4 3 /* Written November 10 1975 by Paul Green */ 4 4 /* Modified October 1978 by Larry Johnson to include line_type_names */ 4 5 /* Modified 12/19/78 by J. Stern to add POLLED_VIP line type */ 4 6 /* Modified 9/27/79 by J. Stern to add X25LAP line type */ 4 7 /* Modified Spring 1981 by Charles Hornig to add HDLC line type */ 4 8 /* Modified May 1981 by Robert Coren to add COLTS line type */ 4 9 /* Modified September 1984 by Robert Coren to correctly count VIP as a synchronous line type */ 4 10 4 11 4 12 /****^ HISTORY COMMENTS: 4 13* 1) change(86-02-25,Negaret), approve(87-07-13,MCR7679), 4 14* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 4 15* Add a DSA line type. 4 16* 2) change(87-03-17,Beattie), approve(87-07-13,MCR7656), 4 17* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 4 18* Add HASP_OPR to identify HASP workstation consoles with login service. 4 19* END HISTORY COMMENTS */ 4 20 4 21 4 22 declare (LINE_MC initial (-2), 4 23 LINE_TELNET initial (-1), 4 24 LINE_UNKNOWN initial (0), 4 25 LINE_ASCII initial (1), 4 26 LINE_1050 initial (2), 4 27 LINE_2741 initial (3), 4 28 LINE_ARDS initial (4), 4 29 LINE_SYNCH initial (5), 4 30 LINE_G115 initial (6), 4 31 LINE_BSC initial (7), 4 32 LINE_ETX initial (8), 4 33 LINE_VIP initial (9), 4 34 LINE_ASYNC1 initial (10), 4 35 LINE_ASYNC2 initial (11), 4 36 LINE_ASYNC3 initial (12), 4 37 LINE_SYNC1 initial (13), 4 38 LINE_SYNC2 initial (14), 4 39 LINE_SYNC3 initial (15), 4 40 LINE_POLLED_VIP initial (16), 4 41 LINE_X25LAP initial (17), 4 42 LINE_HDLC initial (18), 4 43 LINE_COLTS initial (19), 4 44 LINE_DSA initial (20), 4 45 LINE_HASP_OPR initial (21) 4 46 ) fixed bin internal static options (constant); 4 47 4 48 dcl max_line_type fixed bin int static options (constant) init (21); 4 49 4 50 declare n_sync_line_types fixed bin int static options (constant) init (10); 4 51 4 52 declare sync_line_type (10) fixed bin int static options (constant) init (5, 6, 7, 9, 13, 14, 15, 16, 17, 18); 4 53 4 54 dcl line_types (-2:21) char (16) int static options (constant) init ( 4 55 "MC", /* -2 */ 4 56 "TELNET", /* -1 */ 4 57 "none", /* 0 */ 4 58 "ASCII", /* 1 */ 4 59 "1050", /* 2 */ 4 60 "2741", /* 3 */ 4 61 "ARDS", /* 4 */ 4 62 "Sync", /* 5 */ 4 63 "G115", /* 6 */ 4 64 "BSC", /* 7 */ 4 65 "202ETX", /* 8 */ 4 66 "VIP", /* 9 */ 4 67 "ASYNC1", /* 10 */ 4 68 "ASYNC2", /* 11 */ 4 69 "ASYNC3", /* 12 */ 4 70 "SYNC1", /* 13 */ 4 71 "SYNC2", /* 14 */ 4 72 "SYNC3", /* 15 */ 4 73 "POLLED_VIP", /* 16 */ 4 74 "X25LAP", /* 17 */ 4 75 "HDLC", /* 18 */ 4 76 "COLTS", /* 19 */ 4 77 "DSA", /* 20 */ 4 78 "HASP_OPR"); /* 21 */ 4 79 4 80 /* END INCLUDE FILE ... line_types.incl.pl1 */ 98 99 100 101 /* entry to request to become a non-registered dial server */ 102 103 bv_code = 0; 104 105 request_ptr = bv_request_ptr; 106 call fill_request; /* fill out red tape */ 107 dial_rq.header.type = ASR_DIAL_SERVER; 108 dial_rq.flags.start = "1"b; /* this is a request to allow dials */ 109 110 call send_request; /* communicate with boss */ 111 return; 112 113 114 /* Entry for a dial server process to release a selected channel dialed to him */ 115 116 release_channel: 117 entry (bv_request_ptr, bv_code); 118 119 hangup_channel = "1"b; 120 dont_listen = "0"b; 121 go to release_channel_join; 122 123 release_channel_no_hangup: 124 entry (bv_request_ptr, bv_code); 125 126 hangup_channel = "0"b; 127 dont_listen = "0"b; 128 go to release_channel_join; 129 release_channel_no_listen: 130 entry (bv_request_ptr, bv_code); 131 132 dont_listen = "1"b; 133 hangup_channel = "1"b; 134 135 release_channel_join: 136 bv_code = 0; 137 138 request_ptr = bv_request_ptr; /* copy ptr */ 139 call fill_request; 140 dial_rq.header.type = ASR_DIAL_SERVER; 141 dial_rq.flags.release_channel = "1"b; /* this is a channel release request */ 142 dial_rq.channel_name = request_ptr -> dial_manager_arg.channel_name; /* this is the channel to hangup */ 143 dial_rq.flags.no_hangup = ^hangup_channel; 144 dial_rq.flags.no_listen = dont_listen; 145 146 call send_request; 147 return; 148 149 /* Entry to request to allow dials on a registered dial qualifier */ 150 151 registered_server: entry (bv_request_ptr, bv_code); 152 153 bv_code = 0; 154 155 request_ptr = bv_request_ptr; 156 157 call fill_request; 158 159 dial_rq.header.type = ASR_DIAL_SERVER; 160 dial_rq.flags.registered_server = "1"b; 161 dial_rq.flags.start = "1"b; /* this is in for test purposes only */ 162 163 call send_request; 164 return; 165 166 /* Entries to stop being a dial server */ 167 168 release_dial_id: /* stop as server, but keep current calls */ 169 entry (bv_request_ptr, bv_code); 170 171 release_dial_id_sw = "1"b; 172 go to shutoff_dials_common; 173 174 175 shutoff_dials: /* stop as server and hangup all calls */ 176 entry (bv_request_ptr, bv_code); 177 release_dial_id_sw = "0"b; 178 179 shutoff_dials_common: 180 bv_code = 0; 181 182 request_ptr = bv_request_ptr; /* copy ptr for efficiency */ 183 call fill_request; 184 dial_rq.header.type = ASR_DIAL_SERVER; 185 if release_dial_id_sw then dial_rq.flags.release_dial_id = "1"b; /* keep current lines */ 186 else dial_rq.flags.stop = "1"b; /* hang 'em up */ 187 188 call send_request; 189 return; 190 191 /* Entry for a privileged process (daemons) to call to attach any 192* channel in the lines file as if it had dialed to the process itself. */ 193 194 privileged_attach: 195 entry (bv_request_ptr, bv_code); 196 197 tandd = "0"b; 198 go to priv_attach_join; 199 200 tandd_attach: 201 entry (bv_request_ptr, bv_code); 202 203 tandd = "1"b; 204 205 priv_attach_join: 206 bv_code = 0; 207 208 request_ptr = bv_request_ptr; /* copy ptr for efficiency */ 209 call fill_request; 210 dial_rq.header.type = ASR_DIAL_SERVER; 211 dial_rq.channel_name = request_ptr -> dial_manager_arg.channel_name; 212 dial_rq.flags.privileged_attach = "1"b; /* ask for the channel */ 213 dial_rq.flags.tandd_attach = tandd; 214 215 call send_request; 216 return; 217 218 /* Entry for a user to attach and dial an auto call line. */ 219 220 dial_out: 221 entry (bv_request_ptr, bv_code); 222 223 bv_code = 0; 224 225 request_ptr = bv_request_ptr; 226 227 call fill_request; 228 229 dial_rq.channel_name = request_ptr -> dial_manager_arg.channel_name; /* remember requested line */ 230 dial_rq.header.type = ASR_DIAL_OUT; /* we're dialing out */ 231 232 if request_ptr -> dial_manager_arg.version >= dial_manager_arg_version_2 then do; /* look at new fields */ 233 dial_rq.dial_out_destination = request_ptr -> dial_manager_arg.dial_out_destination; 234 if request_ptr -> dial_manager_arg.reservation_string ^= "" then do; /* RCP-like description */ 235 reservation_string = request_ptr -> dial_manager_arg.reservation_string; /* efficiency, svp. */ 236 sub_string = ltrim (before (reservation_string, ",")); /* get a device requirement */ 237 do while (sub_string ^= ""); 238 if index (sub_string, "baud_rate=") = 1 then do; 239 on conversion begin; /* prevent the outrageous */ 240 code = error_table_$bad_conversion; 241 goto return_code; 242 end; 243 sub_string = after (sub_string, "="); 244 if sub_string = "" then go to bad_arg_found; 245 dial_rq.baud_rate = convert (dial_rq.baud_rate, sub_string); 246 revert conversion; 247 end; 248 else if index (sub_string, "line_type=") = 1 then do; 249 sub_string = ltrim (after (sub_string, "=")); /* just the LINE_TYPE */ 250 ldx = lbound (line_types, 1) - 1; /* flag nothing found yet */ 251 do i = lbound (line_types, 1) to hbound (line_types, 1) /* is there any such animal? */ 252 while (ldx < lbound (line_types, 1)); 253 if sub_string = line_types (i) then 254 ldx = i; 255 end; 256 if ldx < lbound (line_types, 1) then do; 257 code = error_table_$invalid_line_type; 258 goto return_code; 259 end; 260 else dial_rq.line_type = ldx; /* make specification to dial_ctl_ */ 261 end; 262 else if index (sub_string, "server_type=") = 1 then do; 263 dial_rq.server_type = substr (sub_string, 13); 264 end; 265 else do; 266 bad_arg_found: code = error_table_$bad_arg; 267 goto return_code; 268 end; 269 reservation_string = after (reservation_string, ","); /* eliminate portion just considered */ 270 sub_string = ltrim (before (reservation_string, ",")); /* and set up for next portion */ 271 end; 272 end; 273 end; 274 else do; /* version 1 dial_manager_arg structure */ 275 dial_rq.dial_out_destination = request_ptr -> dial_manager_arg.dial_qualifier; 276 end; 277 call send_request; 278 279 return; 280 281 /* Entry to release a dial out line. */ 282 283 terminate_dial_out: 284 entry (bv_request_ptr, bv_code); 285 286 bv_code = 0; 287 288 289 request_ptr = bv_request_ptr; 290 291 call fill_request; 292 293 dial_rq.channel_name = request_ptr -> dial_manager_arg.channel_name; 294 dial_rq.header.type = ASR_DIAL_OUT; 295 dial_rq.flags.release_channel = "1"b; /* Hang up the line */ 296 297 call send_request; 298 299 return; 300 301 302 dial_failed: 303 code = error_table_$action_not_performed; 304 305 return_code: 306 bv_code = code; 307 return; 308 309 fill_request: 310 procedure; 311 312 if request_ptr -> dial_manager_arg.version < /* dial_manager_arg_version_1 */ 1 313 | request_ptr -> dial_manager_arg.version > dial_manager_arg_version_4 314 then do; 315 code = error_table_$unimplemented_version; 316 go to return_code; 317 end; 318 319 if request_ptr -> dial_manager_arg.version >= dial_manager_arg_version_2 then 320 request_ptr -> dial_manager_arg.dial_message = -1; /* initialize OUTPUT field */ 321 call system_info_$request_chn (dial_control_process, dial_control_channel, 322 request_mseg_dir, request_mseg); 323 324 dial_rq.header.version = as_request_version_1; 325 dial_rq.header.reply_channel = request_ptr -> dial_manager_arg.dial_channel; 326 327 dial_rq.version = dial_server_request_version_4; 328 dial_rq.dial_control_channel = request_ptr -> dial_manager_arg.dial_channel; 329 dial_rq.dial_qualifier = request_ptr -> dial_manager_arg.dial_qualifier; 330 string (dial_rq.flags) = ""b; 331 dial_rq.channel_name = ""; 332 dial_rq.baud_rate = -1; 333 dial_rq.line_type = lbound (line_types, 1) - 1; 334 dial_rq.server_type = ""; 335 dial_rq.dial_out_destination = ""; 336 dial_rq.access_class = ""b; 337 dial_rq.privileged_server = "0"b; 338 339 if (request_ptr -> dial_manager_arg.version >= dial_manager_arg_version_3) then do; 340 if request_ptr -> dial_manager_arg.access_class_required then do; 341 dial_rq.access_class = request_ptr -> dial_manager_arg.access_class; 342 dial_rq.flags.access_class_specified = "1"b; 343 end; 344 if request_ptr -> dial_manager_arg.version >= dial_manager_arg_version_4 then do; 345 if request_ptr -> dial_manager_arg.privileged_operation /* only meaningful for accept dials */ 346 then dial_rq.privileged_server = "1"b; 347 end; 348 else dial_rq.privileged_server = comm_privilege (); 349 end; 350 else dial_rq.privileged_server = comm_privilege (); 351 return; 352 353 end fill_request; 354 355 356 send_request: 357 procedure; 358 359 dcl cdm_device char (32); /* these variables are used to avoid */ 360 dcl cdm_iom char (32); /* errors from convert_dial_message */ 361 dcl cdm_ndialed fixed bin; /* which gets upset if string parameters are too short. */ 362 dcl cdm_status bit (36) aligned; /* We just throw the results away */ 363 364 call message_segment_$add_file (request_mseg_dir, request_mseg, addr (dial_rq), 36 * size (dial_rq), 365 request_uid, code); 366 if code ^= 0 then go to return_code; 367 368 call hcs_$wakeup (dial_control_process, dial_control_channel, request_uid, code); 369 if code ^= 0 then go to dial_failed; 370 371 372 wait_list.n_channels = 1; 373 wait_list.channel_id (1) = dial_rq.header.reply_channel; 374 375 call ipc_$block (addr (wait_list), addr (reply), code); 376 if code ^= 0 then do; 377 call convert_ipc_code_ (code); 378 go to return_code; 379 end; 380 381 if request_ptr -> dial_manager_arg.version >= dial_manager_arg_version_2 then 382 request_ptr -> dial_manager_arg.dial_message = reply.message; /* OUTPUT field */ 383 384 call convert_dial_message_ (reply.message, cdm_device, cdm_iom, cdm_ndialed, cdm_status, code); 385 if code ^= 0 386 then go to return_code; 387 388 end send_request; 389 390 comm_privilege: 391 procedure returns (bit (1) aligned); 392 393 declare get_privileges_ entry() returns(bit (36) aligned); 5 1 /* Begin include file aim_privileges.incl.pl1 BIM 831206 */ 5 2 /* format: style3 */ 5 3 5 4 declare aim_privileges_ptr pointer; 5 5 declare 1 aim_privileges unaligned based (aim_privileges_ptr), 5 6 ( 2 ipc, /** interprocess communication privilege */ 5 7 2 dir, /** directory privilege */ 5 8 2 seg, /** segment privilege */ 5 9 2 soos, /** security out-of-service privilege */ 5 10 2 ring1, /** ring 1 access privilege */ 5 11 2 rcp, /** RCP resource access privilege */ 5 12 2 comm /** communications cross-AIM privilege */ 5 13 ) bit (1), 5 14 2 pad bit (29); 5 15 5 16 declare ( 5 17 IPC_PRIVILEGE init ("1"b), 5 18 DIR_PRIVILEGE init ("01"b), 5 19 SEG_PRIVILEGE init ("001"b), 5 20 SOOS_PRIVILEGE init ("0001"b), 5 21 RING1_PRIVILEGE init ("00001"b), 5 22 RCP_PRIVILEGE init ("000001"b), 5 23 COMM_PRIVILEGE init ("0000001"b), 5 24 ALL_PRIVILEGES init ("1111111"b) 5 25 ) bit (36) int static aligned options (constant); 5 26 5 27 5 28 /* End include file aim_privileges.incl.pl1 */ 394 395 396 return ((get_privileges_ () & COMM_PRIVILEGE) = COMM_PRIVILEGE); 397 end comm_privilege; 398 399 end allow_dials; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/04/87 1538.8 dial_manager_.pl1 >special_ldd>install>MR12.1-1054>dial_manager_.pl1 95 1 09/13/84 0921.5 dial_manager_arg.incl.pl1 >ldd>include>dial_manager_arg.incl.pl1 96 2 10/30/86 2010.5 as_request_header.incl.pl1 >ldd>include>as_request_header.incl.pl1 97 3 09/13/84 0921.5 dial_server_request.incl.pl1 >ldd>include>dial_server_request.incl.pl1 98 4 08/04/87 1140.0 line_types.incl.pl1 >spec>install>1056>line_types.incl.pl1 394 5 08/19/84 1445.6 aim_privileges.incl.pl1 >ldd>include>aim_privileges.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. ASR_DIAL_OUT constant fixed bin(17,0) initial dcl 2-29 ref 230 294 ASR_DIAL_SERVER constant fixed bin(17,0) initial dcl 2-29 ref 107 140 159 184 210 COMM_PRIVILEGE constant bit(36) initial dcl 5-16 ref 396 396 access_class 51 000324 automatic bit(72) level 2 in structure "dial_rq" dcl 54 in procedure "allow_dials" set ref 336* 341* access_class 134 based bit(72) level 2 in structure "dial_manager_arg" dcl 1-14 in procedure "allow_dials" ref 341 access_class_required 136 based bit(1) level 3 packed unaligned dcl 1-14 ref 340 access_class_specified 50(09) 000324 automatic bit(1) level 3 packed unaligned dcl 54 set ref 342* addr builtin function dcl 91 ref 364 364 375 375 375 375 after builtin function dcl 91 ref 243 249 269 as_request_header based structure level 1 dcl 2-62 as_request_version_1 constant fixed bin(17,0) initial dcl 2-27 ref 324 baud_rate 36 000324 automatic fixed bin(17,0) level 2 dcl 54 set ref 245* 245 332* before builtin function dcl 91 ref 236 270 bv_code parameter fixed bin(35,0) dcl 33 set ref 28 103* 116 123 129 135* 151 153* 168 175 179* 194 200 205* 220 223* 283 286* 305* bv_request_ptr parameter pointer dcl 33 ref 28 105 116 123 129 138 151 155 168 175 182 194 200 208 220 225 283 289 cdm_device 000440 automatic char(32) unaligned dcl 359 set ref 384* cdm_iom 000450 automatic char(32) unaligned dcl 360 set ref 384* cdm_ndialed 000460 automatic fixed bin(17,0) dcl 361 set ref 384* cdm_status 000461 automatic bit(36) dcl 362 set ref 384* channel_id 2 000400 automatic fixed bin(71,0) array level 2 dcl 56 set ref 373* channel_name 12 based char(32) level 2 in structure "dial_manager_arg" dcl 1-14 in procedure "allow_dials" ref 142 211 229 293 channel_name 16 000324 automatic char(32) level 2 in structure "dial_rq" dcl 54 in procedure "allow_dials" set ref 142* 211* 229* 293* 331* code 000170 automatic fixed bin(35,0) dcl 39 set ref 240* 257* 266* 302* 305 315* 364* 366 368* 369 375* 376 377* 384* 385 conversion 000414 stack reference condition dcl 70 ref 239 246 convert builtin function dcl 91 ref 245 convert_dial_message_ 000034 constant entry external dcl 82 ref 384 convert_ipc_code_ 000032 constant entry external dcl 82 ref 377 dial_channel 10 based fixed bin(71,0) level 2 dcl 1-14 ref 325 328 dial_control_channel 6 000324 automatic fixed bin(71,0) level 2 in structure "dial_rq" dcl 54 in procedure "allow_dials" set ref 328* dial_control_channel 000104 automatic fixed bin(71,0) dcl 39 in procedure "allow_dials" set ref 321* 368* dial_control_process 000100 automatic bit(36) dcl 39 set ref 321* 368* dial_manager_arg based structure level 1 dcl 1-14 dial_manager_arg_version_2 constant fixed bin(17,0) initial dcl 1-10 ref 232 319 381 dial_manager_arg_version_3 constant fixed bin(17,0) initial dcl 1-11 ref 339 dial_manager_arg_version_4 constant fixed bin(17,0) initial dcl 1-12 ref 312 344 dial_message 132 based fixed bin(71,0) level 2 dcl 1-14 set ref 319* 381* dial_out_destination 22 based char(32) level 2 in structure "dial_manager_arg" dcl 1-14 in procedure "allow_dials" ref 233 dial_out_destination 26 000324 automatic char(32) level 2 in structure "dial_rq" dcl 54 in procedure "allow_dials" set ref 233* 275* 335* dial_qualifier 10 000324 automatic char(22) level 2 in structure "dial_rq" dcl 54 in procedure "allow_dials" set ref 329* dial_qualifier 1 based char(22) level 2 in structure "dial_manager_arg" dcl 1-14 in procedure "allow_dials" ref 275 329 dial_rq 000324 automatic structure level 1 dcl 54 set ref 364 364 364 dial_server_request based structure level 1 dcl 3-21 dial_server_request_version_4 constant fixed bin(17,0) initial dcl 3-19 ref 327 dont_listen 000172 automatic bit(1) unaligned dcl 39 set ref 120* 127* 132* 144 error_table_$action_not_performed 000010 external static fixed bin(35,0) dcl 74 ref 302 error_table_$bad_arg 000016 external static fixed bin(35,0) dcl 74 ref 266 error_table_$bad_conversion 000012 external static fixed bin(35,0) dcl 74 ref 240 error_table_$invalid_line_type 000014 external static fixed bin(35,0) dcl 74 ref 257 error_table_$unimplemented_version 000020 external static fixed bin(35,0) dcl 74 ref 315 flags 136 based structure level 2 in structure "dial_manager_arg" dcl 1-14 in procedure "allow_dials" flags 50 000324 automatic structure level 2 in structure "dial_rq" dcl 54 in procedure "allow_dials" set ref 330* get_privileges_ 000036 constant entry external dcl 393 ref 396 hangup_channel 000171 automatic bit(1) unaligned dcl 39 set ref 119* 126* 133* 143 hbound builtin function dcl 91 ref 251 hcs_$wakeup 000024 constant entry external dcl 82 ref 368 header 000324 automatic structure level 2 dcl 54 i 000102 automatic fixed bin(17,0) dcl 39 set ref 251* 253 253* ipc_$block 000030 constant entry external dcl 82 ref 375 lbound builtin function dcl 91 ref 250 251 251 256 333 ldx 000101 automatic fixed bin(17,0) dcl 39 set ref 250* 251 253* 256 260 line_type 37 000324 automatic fixed bin(17,0) level 2 dcl 54 set ref 260* 333* line_types 000000 constant char(16) initial array unaligned dcl 4-54 ref 250 251 251 251 253 256 333 ltrim builtin function dcl 91 ref 236 249 270 message 2 000404 automatic fixed bin(71,0) level 2 dcl 61 set ref 381 384* message_segment_$add_file 000026 constant entry external dcl 82 ref 364 n_channels 000400 automatic fixed bin(17,0) level 2 dcl 56 set ref 372* no_hangup 50(05) 000324 automatic bit(1) level 3 packed unaligned dcl 54 set ref 143* no_listen 50(08) 000324 automatic bit(1) level 3 packed unaligned dcl 54 set ref 144* privileged_attach 50(02) 000324 automatic bit(1) level 3 packed unaligned dcl 54 set ref 212* privileged_operation 136(01) based bit(1) level 3 packed unaligned dcl 1-14 ref 345 privileged_server 50(10) 000324 automatic bit(1) level 3 packed unaligned dcl 54 set ref 337* 345* 348* 350* registered_server 50(04) 000324 automatic bit(1) level 3 packed unaligned dcl 54 set ref 160* release_channel 50(03) 000324 automatic bit(1) level 3 packed unaligned dcl 54 set ref 141* 295* release_dial_id 50(06) 000324 automatic bit(1) level 3 packed unaligned dcl 54 set ref 185* release_dial_id_sw 000320 automatic bit(1) dcl 39 set ref 171* 177* 185 reply 000404 automatic structure level 1 dcl 61 set ref 375 375 reply_channel 2 000324 automatic fixed bin(71,0) level 3 dcl 54 set ref 325* 373 request_mseg 000160 automatic char(32) unaligned dcl 39 set ref 321* 364* request_mseg_dir 000106 automatic char(168) unaligned dcl 39 set ref 321* 364* request_ptr 000422 automatic pointer dcl 3-17 set ref 105* 138* 142 155* 182* 208* 211 225* 229 232 233 234 235 275 289* 293 312 312 319 319 325 328 329 339 340 341 344 345 381 381 request_uid 000322 automatic bit(72) dcl 39 set ref 364* 368* reservation_string 000246 automatic char(168) unaligned dcl 39 in procedure "allow_dials" set ref 235* 236 269* 269 270 reservation_string 32 based char(256) level 2 in structure "dial_manager_arg" dcl 1-14 in procedure "allow_dials" ref 234 235 server_type 40 000324 automatic char(32) level 2 dcl 54 set ref 263* 334* size builtin function dcl 91 ref 364 start 50 000324 automatic bit(1) level 3 packed unaligned dcl 54 set ref 108* 161* stop 50(01) 000324 automatic bit(1) level 3 packed unaligned dcl 54 set ref 186* string builtin function dcl 91 set ref 330* sub_string 000174 automatic char(168) unaligned dcl 39 set ref 236* 237 238 243* 243 244 245 248 249* 249 253 262 263 270* substr builtin function dcl 91 ref 263 system_info_$request_chn 000022 constant entry external dcl 82 ref 321 tandd 000173 automatic bit(1) unaligned dcl 39 set ref 197* 203* 213 tandd_attach 50(07) 000324 automatic bit(1) level 3 packed unaligned dcl 54 set ref 213* type 1 000324 automatic fixed bin(17,0) level 3 dcl 54 set ref 107* 140* 159* 184* 210* 230* 294* version 000324 automatic fixed bin(17,0) level 3 in structure "dial_rq" dcl 54 in procedure "allow_dials" set ref 324* version based fixed bin(17,0) level 2 in structure "dial_manager_arg" dcl 1-14 in procedure "allow_dials" ref 232 312 312 319 339 344 381 version 4 000324 automatic fixed bin(17,0) level 2 in structure "dial_rq" dcl 54 in procedure "allow_dials" set ref 327* wait_list 000400 automatic structure level 1 dcl 56 set ref 375 375 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ALL_PRIVILEGES internal static bit(36) initial dcl 5-16 ASR_ABS_COMMAND internal static fixed bin(17,0) initial dcl 2-29 ASR_ADMIN_COMMAND internal static fixed bin(17,0) initial dcl 2-29 ASR_BUMP_USER internal static fixed bin(17,0) initial dcl 2-29 ASR_COM_CHANNEL_INFO internal static fixed bin(17,0) initial dcl 2-29 ASR_DAEMON_COMMAND internal static fixed bin(17,0) initial dcl 2-29 ASR_DEFER_IN_ADMIN_MODE internal static bit(1) initial array unaligned dcl 2-45 ASR_FIRST_TYPE internal static fixed bin(17,0) initial dcl 2-29 ASR_FPE_CAUSES_LOGOUT internal static fixed bin(17,0) initial dcl 2-29 ASR_FPE_CAUSES_NEW_PROC internal static fixed bin(17,0) initial dcl 2-29 ASR_LAST_TYPE internal static fixed bin(17,0) initial dcl 2-29 ASR_NOTE_PNT_CHANGE internal static fixed bin(17,0) initial dcl 2-29 ASR_PROC_TERM_NOTIFY internal static fixed bin(17,0) initial dcl 2-29 ASR_REQUEST_NAMES internal static char(40) initial array unaligned dcl 2-48 DIR_PRIVILEGE internal static bit(36) initial dcl 5-16 IPC_PRIVILEGE internal static bit(36) initial dcl 5-16 LINE_1050 internal static fixed bin(17,0) initial dcl 4-22 LINE_2741 internal static fixed bin(17,0) initial dcl 4-22 LINE_ARDS internal static fixed bin(17,0) initial dcl 4-22 LINE_ASCII internal static fixed bin(17,0) initial dcl 4-22 LINE_ASYNC1 internal static fixed bin(17,0) initial dcl 4-22 LINE_ASYNC2 internal static fixed bin(17,0) initial dcl 4-22 LINE_ASYNC3 internal static fixed bin(17,0) initial dcl 4-22 LINE_BSC internal static fixed bin(17,0) initial dcl 4-22 LINE_COLTS internal static fixed bin(17,0) initial dcl 4-22 LINE_DSA internal static fixed bin(17,0) initial dcl 4-22 LINE_ETX internal static fixed bin(17,0) initial dcl 4-22 LINE_G115 internal static fixed bin(17,0) initial dcl 4-22 LINE_HASP_OPR internal static fixed bin(17,0) initial dcl 4-22 LINE_HDLC internal static fixed bin(17,0) initial dcl 4-22 LINE_MC internal static fixed bin(17,0) initial dcl 4-22 LINE_POLLED_VIP internal static fixed bin(17,0) initial dcl 4-22 LINE_SYNC1 internal static fixed bin(17,0) initial dcl 4-22 LINE_SYNC2 internal static fixed bin(17,0) initial dcl 4-22 LINE_SYNC3 internal static fixed bin(17,0) initial dcl 4-22 LINE_SYNCH internal static fixed bin(17,0) initial dcl 4-22 LINE_TELNET internal static fixed bin(17,0) initial dcl 4-22 LINE_UNKNOWN internal static fixed bin(17,0) initial dcl 4-22 LINE_VIP internal static fixed bin(17,0) initial dcl 4-22 LINE_X25LAP internal static fixed bin(17,0) initial dcl 4-22 RCP_PRIVILEGE internal static bit(36) initial dcl 5-16 RING1_PRIVILEGE internal static bit(36) initial dcl 5-16 SEG_PRIVILEGE internal static bit(36) initial dcl 5-16 SOOS_PRIVILEGE internal static bit(36) initial dcl 5-16 aim_privileges based structure level 1 packed unaligned dcl 5-5 aim_privileges_ptr automatic pointer dcl 5-4 max_line_type internal static fixed bin(17,0) initial dcl 4-48 n_sync_line_types internal static fixed bin(17,0) initial dcl 4-50 sync_line_type internal static fixed bin(17,0) initial array dcl 4-52 NAMES DECLARED BY EXPLICIT CONTEXT. allow_dials 000176 constant entry external dcl 28 bad_arg_found 000744 constant label dcl 266 ref 244 comm_privilege 001415 constant entry internal dcl 390 ref 348 350 dial_failed 001047 constant label dcl 302 ref 369 dial_out 000452 constant entry external dcl 220 fill_request 001056 constant entry internal dcl 309 ref 106 139 157 183 209 227 291 priv_attach_join 000423 constant label dcl 205 ref 198 privileged_attach 000403 constant entry external dcl 194 registered_server 000313 constant entry external dcl 151 release_channel 000221 constant entry external dcl 116 release_channel_join 000256 constant label dcl 135 ref 121 128 release_channel_no_hangup 000234 constant entry external dcl 123 release_channel_no_listen 000246 constant entry external dcl 129 release_dial_id 000340 constant entry external dcl 168 return_code 001052 constant label dcl 305 ref 241 258 267 316 366 378 385 send_request 001230 constant entry internal dcl 356 ref 110 146 163 188 215 277 297 shutoff_dials 000352 constant entry external dcl 175 shutoff_dials_common 000360 constant label dcl 179 ref 172 tandd_attach 000414 constant entry external dcl 200 terminate_dial_out 001022 constant entry external dcl 283 NAME DECLARED BY CONTEXT OR IMPLICATION. index builtin function ref 238 248 262 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1766 2026 1444 1776 Length 2350 1444 40 306 322 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME allow_dials 530 external procedure is an external procedure. on unit on line 239 64 on unit fill_request internal procedure shares stack frame of external procedure allow_dials. send_request internal procedure shares stack frame of external procedure allow_dials. comm_privilege internal procedure shares stack frame of external procedure allow_dials. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME allow_dials 000100 dial_control_process allow_dials 000101 ldx allow_dials 000102 i allow_dials 000104 dial_control_channel allow_dials 000106 request_mseg_dir allow_dials 000160 request_mseg allow_dials 000170 code allow_dials 000171 hangup_channel allow_dials 000172 dont_listen allow_dials 000173 tandd allow_dials 000174 sub_string allow_dials 000246 reservation_string allow_dials 000320 release_dial_id_sw allow_dials 000322 request_uid allow_dials 000324 dial_rq allow_dials 000400 wait_list allow_dials 000404 reply allow_dials 000422 request_ptr allow_dials 000440 cdm_device send_request 000450 cdm_iom send_request 000460 cdm_ndialed send_request 000461 cdm_status send_request THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as call_ext_out_desc call_ext_out return_mac tra_ext_1 enable_op ext_entry int_entry set_chars_eis index_chars_eis any_to_any_truncate_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. convert_dial_message_ convert_ipc_code_ get_privileges_ hcs_$wakeup ipc_$block message_segment_$add_file system_info_$request_chn THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$action_not_performed error_table_$bad_arg error_table_$bad_conversion error_table_$invalid_line_type error_table_$unimplemented_version LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 28 000172 103 000203 105 000205 106 000210 107 000211 108 000213 110 000215 111 000216 116 000217 119 000226 120 000230 121 000231 123 000232 126 000241 127 000242 128 000243 129 000244 132 000253 133 000255 135 000256 138 000260 139 000263 140 000264 141 000266 142 000270 143 000274 144 000302 146 000307 147 000310 151 000311 153 000320 155 000322 157 000325 159 000326 160 000330 161 000332 163 000334 164 000335 168 000336 171 000345 172 000347 175 000350 177 000357 179 000360 182 000362 183 000365 184 000366 185 000370 186 000375 188 000377 189 000400 194 000401 197 000410 198 000411 200 000412 203 000421 205 000423 208 000425 209 000430 210 000431 211 000433 212 000437 213 000441 215 000446 216 000447 220 000450 223 000457 225 000461 227 000464 229 000465 230 000471 232 000473 233 000476 234 000501 235 000505 236 000510 237 000533 238 000540 239 000550 240 000564 241 000567 243 000572 244 000610 245 000614 246 000624 247 000625 248 000626 249 000636 250 000672 251 000674 253 000704 255 000715 256 000717 257 000722 258 000725 260 000726 261 000727 262 000730 263 000740 264 000743 266 000744 267 000747 269 000750 270 000766 271 001011 273 001012 275 001013 277 001016 279 001017 283 001020 286 001027 289 001031 291 001034 293 001035 294 001041 295 001043 297 001045 299 001046 302 001047 305 001052 307 001055 309 001056 312 001057 315 001064 316 001067 319 001070 321 001075 324 001122 325 001124 327 001127 328 001131 329 001133 330 001136 331 001137 332 001142 333 001144 334 001146 335 001151 336 001154 337 001157 339 001161 340 001164 341 001167 342 001173 344 001175 345 001200 347 001205 348 001206 349 001216 350 001217 351 001227 356 001230 364 001231 366 001272 368 001274 369 001311 372 001313 373 001315 375 001317 376 001336 377 001340 378 001347 381 001350 384 001356 385 001412 388 001414 390 001415 396 001417 ----------------------------------------------------------- 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