COMPILATION LISTING OF SEGMENT ards_util_ Compiled by: Multics PL/I Compiler, Release 27d, of October 11, 1982 Compiled at: Honeywell LISD Phoenix, System M Compiled on: 11/18/82 1632.0 mst Thu Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 11 /* Graphic Support Procedure for ARDS. Modified from CDT's Tektronix GSP, 12* 74.09.13 by Dave Moon */ 13 /* Last modified 07/23/75 by C. D. Tavares, to add order call "start_xmit_hd" to 14* circumvent gross ARDS blanking protocol problem, and to handle vectors of 15* length > 1024 by breaking them up. */ 16 17 ards_util_: proc; 18 return; 19 20 dcl effector fixed bin parameter, 21 n_chars_out fixed bin (21) parameter, 22 (instring, outstring) char (*) parameter; 23 24 dcl graphic_code_util_$decode_spi ext entry (pointer, fixed bin, (*) fixed bin), 25 graphic_code_util_$decode_dpi ext entry (pointer, fixed bin, (*) fixed bin), 26 (graphic_code_util_$decode_scl, 27 graphic_code_util_$decode_scl_nozero) ext entry (pointer, fixed bin, (*) float bin); 28 29 dcl graphic_matrix_util_$make_matrix ext entry ((3) fixed bin, (3) float bin, (3, 3) float bin), 30 graphic_matrix_util_$multiply_3x3_x_1x3 ext entry ((3, 3) float bin, (3) float bin, (3) float bin); 31 32 dcl (addr, substr, round) builtin; 33 34 dcl instring_array (262144) char (1) defined (instring) position (1); 35 36 dcl (satisfied, maps_active, visible, dotted) bit (1) aligned static; 37 dcl cur_mode fixed bin static, 38 (Text_Mode fixed bin static init (0), 39 Short_Mode fixed bin static init (1), 40 Long_Mode fixed bin static init (2)); 41 42 dcl (matrix (3, 3), 43 identity_matrix (3, 3) initial 44 (1e0, 0e0, 0e0, 0e0, 1e0, 0e0, 0e0, 0e0, 1e0)) float bin static; 45 46 dcl (xyz static, xyz_temp, xyz_temp2, array_copy) (3) float bin; 47 dcl round_copy (3) fixed bin (35, 7); 48 49 dcl (rotations fixed, scalings float) bin static dimension (3); 50 dcl (Erase init ("000001100"b), 51 TextMode init ("000011100"b), 52 CR init ("000001101"b), 53 ShortVectorMode init ("000011111"b), 54 LongVectorMode init ("000011110"b), 55 SetPoint init ("000011101"b)) bit (9) static; 56 57 dcl 1 coordinate_sequence unaligned, 58 2 first, 59 3 one bit (3), 60 3 mag bit (5), 61 3 sign bit (1), 62 2 second, 63 3 one bit (3), 64 3 dot bit (1), 65 3 mag bit (5); 66 67 dcl (i, j) fixed bin, 68 float_array (3) float bin, 69 fixed_array (3) fixed bin; 70 71 dcl 1 stack (20) aligned static, /* to keep track of abs position */ 72 2 node_val char (3) aligned, 73 2 xyz_copy (3) float bin, 74 2 satisfied_copy bit (1) aligned; 75 76 dcl stack_depth fixed bin static initial (0); 77 78 position: entry (effector, instring, outstring, n_chars_out); 79 80 n_chars_out = 0; 81 82 call graphic_code_util_$decode_scl (addr (instring_array (2)), 3, xyz_temp); /* get coord values */ 83 84 if maps_active then do; /* map into rotated or scaled coords */ 85 xyz_temp2 = xyz_temp; /* because (xyz_temp) in call blows up pl1 */ 86 call graphic_matrix_util_$multiply_3x3_x_1x3 (matrix, xyz_temp2, xyz_temp); 87 end; 88 89 goto pos (effector); /* handle by type */ 90 91 pos (48): pos (49): /* setposition and setpoint */ 92 xyz = xyz_temp; /* set to abs position */ 93 94 if effector = 49 then call draw_to (xyz); /* draw the point */ 95 else satisfied = ""b; /* else say we haven't put it out yet */ 96 return; 97 98 pos (50): xyz_temp = xyz + xyz_temp; /* add to abs position */ 99 call draw_to (xyz_temp); /* draw the vector */ 100 return; 101 102 pos (51): xyz = xyz + xyz_temp; /* add shift to abs position */ 103 satisfied = ""b; 104 return; 105 106 pos (52): xyz = xyz + xyz_temp; /* add shift to abs position */ 107 satisfied = ""b; 108 call draw_to (xyz); /* draw the point */ 109 return; 110 111 112 node_in: entry (effector, instring, outstring, n_chars_out); 113 114 dcl subscriptrange condition; 115 116 n_chars_out = 0; /* we swallow them */ 117 stack_depth = stack_depth + 1; /* push the stack */ 118 if stack_depth > hbound (stack, 1) then signal subscriptrange; /* just in case */ 119 120 stack (stack_depth).xyz_copy (*) = xyz (*); /* copy where we are */ 121 stack (stack_depth).satisfied_copy = satisfied; /* copy if we really are */ 122 stack (stack_depth).node_val = substr (instring, 3, 3); /* copy identifier */ 123 return; 124 125 node_out: entry (effector, instring, outstring, n_chars_out); 126 127 n_chars_out = 0; /* we swallow these too */ 128 stack_depth = stack_depth - 1; /* pop the stack */ 129 if stack_depth < 0 then signal subscriptrange; /* just in case */ 130 131 return; 132 133 expansion: entry (effector, instring, outstring, n_chars_out); 134 135 dcl no_node_match condition; 136 137 n_chars_out = 0; /* no output needed */ 138 do i = 1 to stack_depth while (substr (instring, 3, 3) ^= stack (i).node_val); 139 end; /* find where we've expanded to */ 140 141 if i > stack_depth then signal no_node_match; /* should NEVER happen */ 142 143 stack_depth = i; /* pop stack to here again */ 144 satisfied = stack (stack_depth).satisfied_copy; /* copy all current position */ 145 xyz (*) = stack (stack_depth).xyz_copy (*); /* indicators from where we were */ 146 cur_mode = -1; 147 148 return; 149 150 mode_switch: entry (effector, instring, outstring, n_chars_out); 151 152 dcl iox_$control ext entry (pointer, char (*), pointer, fixed bin (35)), 153 code fixed bin (35), 154 iox_$look_iocb ext entry (char (*), pointer, fixed bin (35)), 155 switch_ptr pointer, 156 keep_modes static char (128) initial (""); 157 158 dcl baud_per_del fixed bin static initial (17); 159 160 dcl 1 info_structure aligned, 161 2 id char (4), 162 2 flags aligned, 163 3 baud_rate fixed bin (17) unaligned, 164 3 pad bit (54) unaligned, 165 2 tw_type fixed bin; 166 167 n_chars_out = 0; /* we swallow this */ 168 169 call iox_$look_iocb (instring, switch_ptr, code); 170 if code ^= 0 then do; 171 n_chars_out = -code; 172 return; 173 end; 174 175 if effector = Prepare_for_graphics then do; /* put ARDS in graphic mode */ 176 if ^ got_speed then do; /* select adjustable wait length after flash */ 177 call iox_$control (switch_ptr, "info", addr (info_structure), code); 178 179 number_nuls = 0; 180 if code ^= 0 then baud_rate = 1200; /* not direct to screen, assume 1200 baud */ 181 number_nuls = baud_rate / baud_per_del; 182 got_speed = "1"b; 183 end; 184 185 call iox_$control (switch_ptr, "start_xmit_hd", null (), code); 186 /* don't check code until hardcore control order is known 187* to have been installed at every site */ 188 189 stack_depth = 0; /* initialize stuff */ 190 xyz = 0; 191 matrix = identity_matrix; 192 scalings = 1e0; 193 rotations = 0; 194 visible = "1"b; 195 satisfied = ""b; 196 cur_mode = -1; /* mode not known */ 197 dotted = "0"b; 198 end; 199 200 else do; /* go to text mode */ 201 xyz (1) = -508; /* go to top of page */ 202 xyz (2) = 660; 203 xyz (3) = 0; 204 satisfied = ""b; 205 call draw_to (xyz); 206 call put_out (TextMode); 207 call put_out (CR); 208 cur_mode = Text_Mode; 209 210 call iox_$control (switch_ptr, "stop_xmit_hd", null (), code); 211 /* don't check code yet -- see above comment */ 212 213 end; 214 215 return; 216 217 set_modes: entry (effector, instring, outstring, n_chars_out); 218 219 n_chars_out = 0; /* we swallow modes */ 220 call graphic_code_util_$decode_spi (addr (instring_array (2)), 1, fixed_array); /* get mode value */ 221 if fixed_array (1) = 0 then visible = ""b; /* we are only called for */ 222 else visible = "1"b; /* the intensity mode */ 223 return; 224 225 set_maps: entry (effector, instring, outstring, n_chars_out); 226 227 n_chars_out = 0; /* we swallow maps */ 228 goto mapping_effector (effector); /* handle by type */ 229 230 mapping_effector (53): /* scaling */ 231 call graphic_code_util_$decode_scl_nozero (addr (instring_array (2)), 3, scalings); /* get scale factors */ 232 goto map_common; 233 234 mapping_effector (54): /* rotation */ 235 call graphic_code_util_$decode_dpi (addr (instring_array (2)), 3, rotations); /* get angles */ 236 237 map_common: 238 call graphic_matrix_util_$make_matrix (rotations, scalings, matrix); /* make the mappings */ 239 240 do i = 1 to 3; 241 do j = 1 to 3; /* see if it's really not unity matrix */ 242 if matrix (i, j) ^= identity_matrix (i, j) then do; /* not unity */ 243 maps_active = "1"b; 244 return; 245 end; 246 end; 247 end; 248 249 maps_active = ""b; /* matrix is nugatory */ 250 return; 251 252 set_line_type: entry (effector, instring, outstring, n_chars_out); 253 254 n_chars_out = 0; 255 call graphic_code_util_$decode_spi (addr (instring_array (2)), 1, fixed_array); 256 dotted = (fixed_array (1) ^= 0); /* 0 = solid, all else dotted (i.e. dashed => dotted) */ 257 return; 258 259 text: entry (effector, instring, outstring, n_chars_out); 260 261 dcl (alignment, string_length) fixed bin, 262 (x_offset, y_offset) float bin, 263 charsizes (3) float bin initial (16, 13, 3) static; 264 265 n_chars_out = 0; 266 if ^visible then return; 267 268 call graphic_code_util_$decode_spi (addr (instring_array (2)), 1, fixed_array); /* get alignment of string */ 269 alignment = fixed_array (1); 270 271 call graphic_code_util_$decode_dpi (addr (instring_array (3)), 1, fixed_array); /* get length of string */ 272 string_length = fixed_array (1); 273 274 x_offset, y_offset = 0; /* from where we currently are */ 275 276 y_offset = divide (alignment - 1, 3, 17, 0) / 2 * charsizes (1); /* align by non-top somewhere */ 277 278 i = mod (alignment-1, 3) + 1; /* get x-alignment */ 279 if i > 1 then x_offset = -string_length * charsizes (2) /* not aligned by left edge */ 280 - (string_length - 1) * charsizes (3); 281 if i = 2 then x_offset = x_offset / 2e0; /* aligned by center */ 282 283 if ^satisfied | x_offset + y_offset ^= 0 then do; /* must move */ 284 call put_out (SetPoint); 285 float_array (1) = xyz (1) + x_offset; 286 float_array (2) = xyz (2) + y_offset; 287 round_copy = float_array; 288 array_copy = round (round_copy, 0); /* because expand_assign blows up creating temps */ 289 call encode (array_copy, "0"b); /* go to correct position */ 290 end; 291 292 call put_out (TextMode); /* go to text mode */ 293 substr (outstring, n_chars_out + 1, string_length) = substr (instring, 5, string_length); 294 n_chars_out = n_chars_out + string_length; /* return text string here */ 295 296 cur_mode = -1; /* arbitrarily screwed */ 297 satisfied = ""b; 298 299 return; 300 301 pause: entry (effector, instring, outstring, n_chars_out); 302 303 dcl iox_$get_line ext entry (pointer, pointer, fixed bin, fixed bin, fixed bin (35)), 304 iox_$user_input pointer external, 305 junk char (200) aligned; 306 307 call iox_$get_line (iox_$user_input, addr (junk), 200, 0, code); /* wait for LF */ 308 n_chars_out = - code; /* if nonzero, error */ 309 return; 310 311 erase: entry (effector, instring, outstring, n_chars_out); 312 313 dcl NUL char (1) static aligned initial (""), 314 got_speed bit (1) initial (""b) aligned static, 315 number_nuls fixed bin static initial (100); 316 317 n_chars_out = 1 + number_nuls; 318 unspec (substr (outstring, 1, 1)) = Erase; 319 substr (outstring, 2, n_chars_out) = copy (NUL, number_nuls); /* this erases screen */ 320 cur_mode = -1; /* clears mode in hardware */ 321 return; 322 323 324 draw_to: proc (coordinates); 325 326 dcl coordinates (3) float bin; 327 328 dcl (i, n_sub_components) fixed bin, 329 max_component float bin; 330 331 if ^visible then do; /* we don't put out many little shifts */ 332 satisfied = ""b; 333 xyz = coordinates; 334 return; 335 end; 336 337 if ^satisfied then do; /* go to where we should be */ 338 call put_out (SetPoint); 339 cur_mode = -1; 340 round_copy = xyz; 341 array_copy = round (round_copy, 0); 342 call encode (array_copy, "0"b); /* put out coordinates */ 343 satisfied = "1"b; /* we are where we think we are */ 344 end; 345 round_copy = coordinates - xyz; 346 array_copy = round (round_copy, 0); 347 348 max_component = max (abs (array_copy (1)), abs (array_copy (2))); 349 350 if max_component = 0 then return; /* done for now */ 351 352 if dotted | max_component >= 32 then do; /* have to use long mode */ 353 if cur_mode ^= Long_Mode then do; 354 call put_out (LongVectorMode); 355 cur_mode = Long_Mode; 356 end; 357 358 if max_component < 1024 then call encode (array_copy, "1"b); /* simple case */ 359 360 else do; /* split up into more than one vector */ 361 n_sub_components = max_component / 1024 + 1; 362 array_copy = array_copy / n_sub_components; 363 364 do i = 1 to n_sub_components; 365 call encode (array_copy, "1"b); 366 end; 367 368 end; 369 end; 370 371 else do; /* use short mode */ 372 if cur_mode ^= Short_Mode then do; 373 call put_out (ShortVectorMode); 374 cur_mode = Short_Mode; 375 end; 376 /* now put a 2-char short vector */ 377 378 first.one = "001"b; 379 first.mag = bit (fixed (array_copy (1), 5), 5); 380 first.sign = (array_copy (1) < 0); 381 call put_out (unspec (first)); 382 383 first.mag = bit (fixed (array_copy (2), 5), 5); 384 first.sign = (array_copy (2) < 0); 385 call put_out (unspec (first)); 386 end; 387 xyz = coordinates; /* remind ourselves we are really there now */ 388 return; 389 390 end draw_to; 391 392 encode: proc (float_coords, vis); /* puts out a vector to (float_coords) */ 393 394 dcl (float_coords (3)) float bin parameter, 395 vis bit (1) aligned parameter, 396 coords (3) fixed bin, 397 fromword fixed bin; 398 399 coords = float_coords; 400 401 fromword = coords (1); /* do X - hardware clips so don't bother */ 402 if fromword < 0 then do; 403 fromword = - fromword; 404 first.sign = "1"b; 405 end; 406 else first.sign = "0"b; 407 first.one, second.one = "001"b; 408 first.mag = substr (unspec (fromword), 32, 5); /* low */ 409 second.mag = substr (unspec (fromword), 27, 5); /* high */ 410 second.dot = ^ vis; /* hardware stupidity requires ^ */ 411 412 call put_out (unspec (first)); 413 call put_out (unspec (second)); 414 415 fromword = coords (2); /* do Y */ 416 if fromword < 0 then do; 417 fromword = - fromword; 418 first.sign = "1"b; 419 end; 420 else first.sign = "0"b; 421 first.mag = substr (unspec (fromword), 32, 5); /* low */ 422 second.mag = substr (unspec (fromword), 27, 5); /* high */ 423 second.dot = dotted; 424 425 call put_out (unspec (first)); 426 call put_out (unspec (second)); 427 428 return; 429 430 end encode; 431 432 put_out: proc (char); /* puts one char into outstring */ 433 434 dcl char bit (9); 435 436 n_chars_out = n_chars_out + 1; 437 unspec (substr (outstring, n_chars_out, 1)) = char; 438 return; 439 end put_out; 440 1 1 /* -------- BEGIN include file graphic_device_table.incl.pl1 ----------- */ 1 2 1 3 dcl gdt_version_2 fixed bin static initial (2); 1 4 1 5 dcl gdt_pointer pointer; 1 6 1 7 dcl 1 graphic_device_table aligned based (gdt_pointer), 1 8 2 device_data aligned, 1 9 3 version_number fixed bin, 1 10 3 terminal_name char (32) aligned, 1 11 3 terminal_type char (4) aligned, 1 12 3 charsizes (3) float bin, 1 13 3 message_size fixed bin (35) aligned, 1 14 3 points_per_inch float bin (63), 1 15 3 pad (10) fixed bin aligned, 1 16 2 effector_data (32 : 70) aligned, 1 17 3 force_alignment aligned, 1 18 4 (expand, call, ignore, error, flush) bit (1) unaligned; 1 19 1 20 dcl (Reference initial (37), 1 21 Process_input initial (64), 1 22 Prepare_for_graphics initial (65), 1 23 Prepare_for_text initial (66), 1 24 Expansion initial (67), 1 25 Open initial (68), 1 26 Close initial (69), 1 27 Modes initial (70)) fixed bin static options (constant); 1 28 1 29 /* --------- END include file graphic_device_table.incl.pl1 ------------ */ 441 442 443 end ards_util_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/18/82 1627.7 ards_util_.pl1 >dumps>old>recomp>ards_util_.pl1 441 1 03/27/82 0439.2 graphic_device_table.incl.pl1 >ldd>include>graphic_device_table.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. CR 000040 internal static bit(9) initial unaligned dcl 50 set ref 207* Erase 002545 constant bit(9) initial unaligned dcl 50 ref 318 LongVectorMode 000042 internal static bit(9) initial unaligned dcl 50 set ref 354* Long_Mode constant fixed bin(17,0) initial dcl 37 ref 353 355 NUL constant char(1) initial dcl 313 ref 319 Prepare_for_graphics constant fixed bin(17,0) initial dcl 1-20 ref 175 SetPoint 000043 internal static bit(9) initial unaligned dcl 50 set ref 284* 338* ShortVectorMode 000041 internal static bit(9) initial unaligned dcl 50 set ref 373* Short_Mode constant fixed bin(17,0) initial dcl 37 ref 372 374 TextMode 000037 internal static bit(9) initial unaligned dcl 50 set ref 206* 292* Text_Mode constant fixed bin(17,0) initial dcl 37 ref 208 addr builtin function dcl 32 ref 82 82 177 177 220 220 230 230 234 234 255 255 268 268 271 271 307 307 alignment 000152 automatic fixed bin(17,0) dcl 261 set ref 269* 276 278 array_copy 000106 automatic float bin(27) array dcl 46 set ref 288* 289* 341* 342* 346* 348 348 358* 362* 362 365* 379 380 383 384 baud_per_del 002544 constant fixed bin(17,0) initial dcl 158 ref 181 baud_rate 1 000146 automatic fixed bin(17,0) level 3 packed unaligned dcl 160 set ref 180* 181 char parameter bit(9) unaligned dcl 434 ref 432 437 charsizes 000007 constant float bin(27) initial array dcl 261 ref 276 279 279 code 000142 automatic fixed bin(35,0) dcl 152 set ref 169* 170 171 177* 180 185* 210* 307* 308 coordinate_sequence 000114 automatic structure level 1 packed unaligned dcl 57 coordinates parameter float bin(27) array dcl 326 ref 324 333 345 387 coords 000264 automatic fixed bin(17,0) array dcl 394 set ref 399* 401 415 cur_mode 000014 internal static fixed bin(17,0) dcl 37 set ref 146* 196* 208* 296* 320* 339* 353 355* 372 374* dot 0(12) 000114 automatic bit(1) level 3 packed unaligned dcl 57 set ref 410* 423* dotted 000013 internal static bit(1) dcl 36 set ref 197* 256* 352 423 effector parameter fixed bin(17,0) dcl 20 ref 78 89 94 112 125 133 150 175 217 225 228 252 259 301 311 first 000114 automatic structure level 2 packed unaligned dcl 57 set ref 381 381 385 385 412 412 425 425 fixed_array 000122 automatic fixed bin(17,0) array dcl 67 set ref 220* 221 255* 256 268* 269 271* 272 flags 1 000146 automatic structure level 2 dcl 160 float_array 000117 automatic float bin(27) array dcl 67 set ref 285* 286* 287 float_coords parameter float bin(27) array dcl 394 ref 392 399 fromword 000267 automatic fixed bin(17,0) dcl 394 set ref 401* 402 403* 403 408 409 415* 416 417* 417 421 422 got_speed 000211 internal static bit(1) initial dcl 313 set ref 176 182* graphic_code_util_$decode_dpi 000216 constant entry external dcl 24 ref 234 271 graphic_code_util_$decode_scl 000220 constant entry external dcl 24 ref 82 graphic_code_util_$decode_scl_nozero 000222 constant entry external dcl 24 ref 230 graphic_code_util_$decode_spi 000214 constant entry external dcl 24 ref 220 255 268 graphic_matrix_util_$make_matrix 000224 constant entry external dcl 29 ref 237 graphic_matrix_util_$multiply_3x3_x_1x3 000226 constant entry external dcl 29 ref 86 i 000115 automatic fixed bin(17,0) dcl 67 in procedure "ards_util_" set ref 138* 138* 141 143 240* 242 242* 278* 279 281 i 000250 automatic fixed bin(17,0) dcl 328 in procedure "draw_to" set ref 364* identity_matrix 000012 constant float bin(27) initial array dcl 42 ref 191 242 info_structure 000146 automatic structure level 1 dcl 160 set ref 177 177 instring parameter char unaligned dcl 20 set ref 78 82 82 82 82 112 122 125 133 138 150 169* 217 220 220 220 220 225 230 230 230 230 234 234 234 234 252 255 255 255 255 259 268 268 268 268 271 271 271 271 293 301 311 instring_array defined char(1) array unaligned dcl 34 set ref 82 82 220 220 230 230 234 234 255 255 268 268 271 271 iox_$control 000230 constant entry external dcl 152 ref 177 185 210 iox_$get_line 000234 constant entry external dcl 303 ref 307 iox_$look_iocb 000232 constant entry external dcl 152 ref 169 iox_$user_input 000236 external static pointer dcl 303 set ref 307* j 000116 automatic fixed bin(17,0) dcl 67 set ref 241* 242 242* junk 000156 automatic char(200) dcl 303 set ref 307 307 mag 0(13) 000114 automatic bit(5) level 3 in structure "coordinate_sequence" packed unaligned dcl 57 in procedure "ards_util_" set ref 409* 422* mag 0(03) 000114 automatic bit(5) level 3 in structure "coordinate_sequence" packed unaligned dcl 57 in procedure "ards_util_" set ref 379* 383* 408* 421* maps_active 000011 internal static bit(1) dcl 36 set ref 84 243* 249* matrix 000015 internal static float bin(27) array dcl 42 set ref 86* 191* 237* 242 max_component 000252 automatic float bin(27) dcl 328 set ref 348* 350 352 358 361 n_chars_out parameter fixed bin(21,0) dcl 20 set ref 78 80* 112 116* 125 127* 133 137* 150 167* 171* 217 219* 225 227* 252 254* 259 265* 293 294* 294 301 308* 311 317* 319 436* 436 437 n_sub_components 000251 automatic fixed bin(17,0) dcl 328 set ref 361* 362 364 no_node_match 000134 stack reference condition dcl 135 ref 141 node_val 000044 internal static char(3) array level 2 dcl 71 set ref 122* 138 number_nuls 000212 internal static fixed bin(17,0) initial dcl 313 set ref 179* 181* 317 319 one 0(09) 000114 automatic bit(3) level 3 in structure "coordinate_sequence" packed unaligned dcl 57 in procedure "ards_util_" set ref 407* one 000114 automatic bit(3) level 3 in structure "coordinate_sequence" packed unaligned dcl 57 in procedure "ards_util_" set ref 378* 407* outstring parameter char unaligned dcl 20 set ref 78 112 125 133 150 217 225 252 259 293* 301 311 318* 319* 437* rotations 000031 internal static fixed bin(17,0) array dcl 49 set ref 193* 234* 237* round builtin function dcl 32 ref 288 341 346 round_copy 000111 automatic fixed bin(35,7) array dcl 47 set ref 287* 288 340* 341 345* 346 satisfied 000010 internal static bit(1) dcl 36 set ref 95* 103* 107* 121 144* 195* 204* 283 297* 332* 337 343* satisfied_copy 4 000044 internal static bit(1) array level 2 dcl 71 set ref 121* 144 scalings 000034 internal static float bin(27) array dcl 49 set ref 192* 230* 237* second 0(09) 000114 automatic structure level 2 packed unaligned dcl 57 set ref 413 413 426 426 sign 0(08) 000114 automatic bit(1) level 3 packed unaligned dcl 57 set ref 380* 384* 404* 406* 418* 420* stack 000044 internal static structure array level 1 dcl 71 set ref 118 stack_depth 000210 internal static fixed bin(17,0) initial dcl 76 set ref 117* 117 118 120 121 122 128* 128 129 138 141 143* 144 145 189* string_length 000153 automatic fixed bin(17,0) dcl 261 set ref 272* 279 279 293 293 294 subscriptrange 000126 stack reference condition dcl 114 ref 118 129 substr builtin function dcl 32 set ref 122 138 293* 293 318 319* 408 409 421 422 437 switch_ptr 000144 automatic pointer dcl 152 set ref 169* 177* 185* 210* vis parameter bit(1) dcl 394 ref 392 410 visible 000012 internal static bit(1) dcl 36 set ref 194* 221* 222* 266 331 x_offset 000154 automatic float bin(27) dcl 261 set ref 274* 279* 281* 281 283 285 xyz 000026 internal static float bin(27) array dcl 46 set ref 91* 94* 98 102* 102 106* 106 108* 120 145* 190* 201* 202* 203* 205* 285 286 333* 340 345 387* xyz_copy 1 000044 internal static float bin(27) array level 2 dcl 71 set ref 120* 145 xyz_temp 000100 automatic float bin(27) array dcl 46 set ref 82* 85 86* 91 98* 98 99* 102 106 xyz_temp2 000103 automatic float bin(27) array dcl 46 set ref 85* 86* y_offset 000155 automatic float bin(27) dcl 261 set ref 274* 276* 283 286 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. Close internal static fixed bin(17,0) initial dcl 1-20 Expansion internal static fixed bin(17,0) initial dcl 1-20 Modes internal static fixed bin(17,0) initial dcl 1-20 Open internal static fixed bin(17,0) initial dcl 1-20 Prepare_for_text internal static fixed bin(17,0) initial dcl 1-20 Process_input internal static fixed bin(17,0) initial dcl 1-20 Reference internal static fixed bin(17,0) initial dcl 1-20 gdt_pointer automatic pointer dcl 1-5 gdt_version_2 internal static fixed bin(17,0) initial dcl 1-3 graphic_device_table based structure level 1 dcl 1-7 keep_modes internal static char(128) initial unaligned dcl 152 NAMES DECLARED BY EXPLICIT CONTEXT. ards_util_ 000070 constant entry external dcl 17 draw_to 001777 constant entry internal dcl 324 ref 94 99 108 205 encode 002333 constant entry internal dcl 392 ref 289 342 358 365 erase 001731 constant entry external dcl 311 expansion 000421 constant entry external dcl 133 map_common 001243 constant label dcl 237 ref 232 mapping_effector 000005 constant label array(53:54) dcl 230 ref 228 mode_switch 000525 constant entry external dcl 150 node_in 000302 constant entry external dcl 112 node_out 000366 constant entry external dcl 125 pause 001657 constant entry external dcl 301 pos 000000 constant label array(48:52) dcl 91 ref 89 position 000103 constant entry external dcl 78 put_out 002475 constant entry internal dcl 432 ref 206 207 284 292 338 354 373 381 385 412 413 425 426 set_line_type 001314 constant entry external dcl 252 set_maps 001140 constant entry external dcl 225 set_modes 001054 constant entry external dcl 217 text 001374 constant entry external dcl 259 NAMES DECLARED BY CONTEXT OR IMPLICATION. abs builtin function ref 348 348 bit builtin function ref 379 383 copy builtin function ref 319 divide builtin function ref 276 fixed builtin function ref 379 383 hbound builtin function ref 118 max builtin function ref 348 mod builtin function ref 278 null builtin function ref 185 185 210 210 unspec builtin function set ref 318 381 381 385 385 408 409 412 412 413 413 421 422 425 425 426 426 437* STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 3010 3250 2550 3020 Length 3536 2550 240 251 237 204 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME ards_util_ 238 external procedure is an external procedure. draw_to internal procedure shares stack frame of external procedure ards_util_. encode internal procedure shares stack frame of external procedure ards_util_. put_out internal procedure shares stack frame of external procedure ards_util_. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 satisfied ards_util_ 000011 maps_active ards_util_ 000012 visible ards_util_ 000013 dotted ards_util_ 000014 cur_mode ards_util_ 000015 matrix ards_util_ 000026 xyz ards_util_ 000031 rotations ards_util_ 000034 scalings ards_util_ 000037 TextMode ards_util_ 000040 CR ards_util_ 000041 ShortVectorMode ards_util_ 000042 LongVectorMode ards_util_ 000043 SetPoint ards_util_ 000044 stack ards_util_ 000210 stack_depth ards_util_ 000211 got_speed ards_util_ 000212 number_nuls ards_util_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME ards_util_ 000100 xyz_temp ards_util_ 000103 xyz_temp2 ards_util_ 000106 array_copy ards_util_ 000111 round_copy ards_util_ 000114 coordinate_sequence ards_util_ 000115 i ards_util_ 000116 j ards_util_ 000117 float_array ards_util_ 000122 fixed_array ards_util_ 000142 code ards_util_ 000144 switch_ptr ards_util_ 000146 info_structure ards_util_ 000152 alignment ards_util_ 000153 string_length ards_util_ 000154 x_offset ards_util_ 000155 y_offset ards_util_ 000156 junk ards_util_ 000250 i draw_to 000251 n_sub_components draw_to 000252 max_component draw_to 000264 coords encode 000267 fromword encode THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. fx1_to_fl2 r_l_a r_ne_as alloc_cs call_ext_out_desc call_ext_out return fl2_to_fx1 mod_fx1 signal shorten_stack ext_entry ext_entry_desc fl2_to_fxscaled trunc_fx2 round_fx1 divide_fx1 THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. graphic_code_util_$decode_dpi graphic_code_util_$decode_scl graphic_code_util_$decode_scl_nozero graphic_code_util_$decode_spi graphic_matrix_util_$make_matrix graphic_matrix_util_$multiply_3x3_x_1x3 iox_$control iox_$get_line iox_$look_iocb THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. iox_$user_input LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 17 000067 18 000075 78 000076 80 000123 82 000125 84 000154 85 000157 86 000164 89 000176 91 000201 94 000206 95 000220 96 000221 98 000222 99 000235 100 000237 102 000240 103 000253 104 000254 106 000255 107 000270 108 000271 109 000277 112 000300 116 000322 117 000324 118 000326 120 000332 121 000350 122 000354 123 000363 125 000364 127 000406 128 000410 129 000413 131 000416 133 000417 137 000441 138 000443 139 000464 141 000466 143 000475 144 000500 145 000503 146 000520 148 000522 150 000523 167 000545 169 000547 170 000571 171 000573 172 000576 175 000577 176 000603 177 000606 179 000635 180 000637 181 000643 182 000653 185 000655 189 000710 190 000712 191 000724 192 000727 193 000741 194 000752 195 000754 196 000755 197 000757 198 000760 201 000761 202 000764 203 000766 204 000770 205 000771 206 000777 207 001006 208 001015 210 001020 215 001051 217 001052 219 001074 220 001076 221 001125 222 001132 223 001135 225 001136 227 001160 228 001162 230 001164 232 001213 234 001214 237 001243 240 001256 241 001263 242 001270 243 001300 244 001302 246 001303 247 001305 249 001307 250 001311 252 001312 254 001334 255 001336 256 001365 257 001371 259 001372 265 001414 266 001416 268 001421 269 001447 271 001451 272 001501 274 001503 276 001506 278 001521 279 001526 281 001542 283 001550 284 001556 285 001564 286 001570 287 001573 288 001606 289 001623 292 001627 293 001636 294 001646 296 001650 297 001653 299 001654 301 001655 307 001677 308 001723 309 001726 311 001727 317 001751 318 001756 319 001762 320 001773 321 001776 324 001777 331 002001 332 002004 333 002005 334 002013 337 002014 338 002016 339 002024 340 002027 341 002043 342 002060 343 002064 345 002067 346 002106 348 002123 350 002136 352 002141 353 002147 354 002152 355 002160 358 002163 361 002173 362 002177 364 002212 365 002221 366 002225 369 002227 372 002230 373 002233 374 002241 378 002244 379 002250 380 002262 381 002270 383 002275 384 002307 385 002315 387 002322 388 002332 392 002333 399 002335 401 002351 402 002353 403 002354 404 002356 405 002360 406 002361 407 002363 408 002373 409 002400 410 002405 412 002414 413 002421 415 002427 416 002431 417 002432 418 002434 419 002436 420 002437 421 002441 422 002446 423 002453 425 002461 426 002466 428 002474 432 002475 436 002477 437 002501 438 002510 ----------------------------------------------------------- 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