COMPILATION LISTING OF SEGMENT graphic_gsp_utility_ Compiled by: Multics PL/I Compiler, Release 27d, of October 11, 1982 Compiled at: Honeywell LISD Phoenix, System M Compiled on: 11/18/82 1633.3 mst Thu Options: optimize map 1 /* *********************************************************** 2* * * 3* * * 4* * Copyright, (C) Honeywell Information Systems Inc., 1981 * 5* * * 6* * * 7* *********************************************************** */ 8 9 /* format: style1,^inddcls,ifthenstmt,ifthendo,ifthen,indcomtxt,dclind5 */ 10 graphic_gsp_utility_: proc; 11 return; 12 13 /* This program implements common utility functions so that writers of 14* graphic support procedures (GSP's) have a source of easy-to-use 15* algorithms. */ 16 17 /* Written 10/17/80 by C. D. Tavares */ 18 1 1 /* --------------- BEGIN include file graphic_etypes.incl.pl1 --------------- */ 1 2 1 3 /* Types of position, mode, and other effectors for the 1 4* Multics General Graphic System */ 1 5 1 6 1 7 /* Null code */ 1 8 1 9 dcl (Null initial (-1), 1 10 1 11 /* Position codes */ 1 12 1 13 Setposition initial (0), 1 14 Setpoint initial (1), 1 15 Vector initial (2), 1 16 Shift initial (3), 1 17 Point initial (4), 1 18 1 19 /* Mode codes, with values where appropriate */ 1 20 1 21 Scaling initial (8), 1 22 Rotation initial (9), 1 23 Clipping initial (10), 1 24 1 25 Intensity initial (16), 1 26 Full_intensity initial (7), 1 27 Half_intensity initial (3), 1 28 Invisible initial (0), 1 29 1 30 Linetype initial (17), 1 31 Solid initial (0), 1 32 Dashed initial (1), 1 33 Dotted initial (2), 1 34 Dash_dotted initial (3), 1 35 Long_dashed initial (4), 1 36 1 37 Sensitivity initial (18), 1 38 Sensitive initial (1), 1 39 Insensitive initial (0), 1 40 1 41 Blink initial (19), 1 42 Steady initial (0), 1 43 Blinking initial (1), 1 44 1 45 Color initial (20), 1 46 1 47 Symbol initial (24), 1 48 1 49 /* Text code, with legal alignments */ 1 50 1 51 Text initial (25), 1 52 Upper_left initial (1), 1 53 Upper_center initial (2), 1 54 Upper_right initial (3), 1 55 Left initial (4), 1 56 Center initial (5), 1 57 Right initial (6), 1 58 Lower_left initial (7), 1 59 Lower_center initial (8), 1 60 Lower_right initial (9), 1 61 1 62 /* Datablock code */ 1 63 1 64 Datablock initial (26), 1 65 1 66 /* Structural effector codes */ 1 67 1 68 List initial (32), 1 69 Array initial (33), 1 70 1 71 /* Merge codes for gm_$get_struc and gm_$put_struc */ 1 72 1 73 On_dup_error initial (0), /* allow no name duplications */ 1 74 On_dup_source initial (1), /* on name dup, force move (use source copy) */ 1 75 On_dup_target_then_nulls initial (2), /* on name dup, use target copy, for nondup symbols create null ones */ 1 76 On_dup_target_then_source initial (3), /* on name dup, use target copy, for nondup symbols, use source copy */ 1 77 1 78 /* Device codes for graphic input devices */ 1 79 1 80 Terminal_program initial (0), 1 81 Keyboard initial (1), 1 82 Mouse initial (2), 1 83 Joystick initial (3), 1 84 Tablet_and_pen initial (4), 1 85 Light_pen initial (5), 1 86 Trackball initial (6), 1 87 Any_device initial (63)) /* 63 is equivalent to -1 in SPI */ 1 88 1 89 fixed bin internal static options (constant); 1 90 1 91 /* ---------------- END include file graphic_etypes.incl.pl1 ---------------- */ 19 20 21 clip_line: entry (from, to, limits, shifting, 22 goto_new_from, new_from, goto_new_to, new_to); 23 24 /* This entry clips a line to the screen boundaries using a rather simple 25* algorithm copped from "Principles of Interactive Computer Graphics" by 26* Newman and Sproull. */ 27 28 /* PARAMETERS */ 29 /* INPUT args: */ 30 dcl (from, /* one endpoint */ 31 to) (2) float bin parameter, /* the other */ 32 limits (2, 2) float bin parameter, /* screen boundaries */ 33 shifting bit (1) parameter, /* on if shift as opposed to vector */ 34 /* OUTPUT args: */ 35 (new_from, /* clipped version */ 36 new_to) (2) float bin parameter, /* clipped version */ 37 (goto_new_from, /* on if user should explicitly move to there */ 38 goto_new_to) bit (1) parameter; /* ditto */ 39 40 /* AUTOMATIC */ 41 42 dcl (from_code, to_code) bit (4); 43 44 /* CONSTANTS */ 45 46 dcl (Off_left initial ("1000"b), 47 Off_right initial ("0100"b), 48 Off_low initial ("0010"b), 49 Off_high initial ("0001"b)) bit (4) static options (constant); 50 51 new_from = from; 52 new_to = to; 53 54 from_code = compute_code (from, limits); 55 to_code = compute_code (to, limits); 56 57 /* If the AND of these codes is not zero, the line is totally offscreen. */ 58 59 if (from_code & to_code) ^= "0000"b then do; 60 goto_new_from, goto_new_to = "0"b; 61 return; 62 end; 63 64 /* If we're shifting, the location of the start point is moot anyway. */ 65 66 if shifting then goto_new_from = ""b; 67 68 /* If not shifting, compute new start point. If different from current 69* position, tell the caller to go there. (We assume he's already AT the 70* point he gives as the current position.) */ 71 72 else do; 73 if from_code ^= "0000"b then do; 74 call crush (from, from_code, to, limits, 75 new_from); 76 goto_new_from = "1"b; 77 end; 78 else goto_new_from = "0"b; 79 end; 80 81 /* If we are shifting to a point onscreen OR we are drawing a visible vector 82* that crosses the screen (even if it doesn't end onscreen) then we want the 83* caller to go to the end point. (If we are drawing a vector and we get here, 84* we KNOW at least part of it is onscreen because we handled the totally 85* offscreen case previously.) */ 86 87 if ^shifting | (to_code = "0000"b) then do; 88 if to_code ^= "0000"b then 89 call crush (to, to_code, from, limits, new_to); 90 goto_new_to = "1"b; 91 end; 92 else goto_new_to = ""b; 93 94 return; 95 96 compute_code: proc (coords, limits) returns (bit (4)); 97 98 dcl coords (2) float bin parameter, 99 limits (2, 2) float bin parameter; 100 101 dcl code bit (4); 102 103 code = "0000"b; 104 105 if coords (1) < limits (1, 1) then code = Off_left; 106 else if coords (1) > limits (2, 1) then code = Off_right; 107 if coords (2) < limits (1, 2) then code = code | Off_low; 108 else if coords (2) > limits (2, 2) then code = code | Off_high; 109 110 return (code); 111 end compute_code; 112 113 crush: proc (point, code, otherpoint, limits, new_point); 114 115 dcl (point, 116 otherpoint, 117 new_point) (2) float bin parameter, 118 code bit (4) parameter, 119 limits (2, 2) float bin parameter; 120 121 dcl (delta_x, delta_y) float bin; 122 123 new_point = point; 124 delta_x = otherpoint (1) - point (1); 125 delta_y = otherpoint (2) - point (2); 126 127 if (code & Off_left) ^= "0000"b then do; 128 new_point (2) = new_point (2) + 129 (limits (1, 1) - new_point (1)) * delta_y / delta_x; 130 new_point (1) = limits (1, 1); 131 code = compute_code (new_point, limits); 132 end; 133 134 if (code & Off_right) ^= "0000"b then do; 135 new_point (2) = new_point (2) + 136 (limits (2, 1) - new_point (1)) * delta_y / delta_x; 137 new_point (1) = limits (2, 1); 138 code = compute_code (new_point, limits); 139 end; 140 141 if (code & Off_low) ^= "0000"b then do; 142 new_point (1) = new_point (1) + 143 (limits (1, 2) - new_point (2)) * delta_x / delta_y; 144 new_point (2) = limits (1, 2); 145 code = compute_code (new_point, limits); 146 end; 147 148 if (code & Off_high) ^= "0000"b then do; 149 new_point (1) = new_point (1) + 150 (limits (2, 2) - new_point (2)) * delta_x / delta_y; 151 new_point (2) = limits (2, 2); 152 end; 153 154 return; 155 end crush; 156 157 clip_text: entry (text_string, alignment, charsizes, curpos, limits, 158 hw_origin, init_shift, str_origin, str_len); 159 160 /* This entry clips a text string given the current position, the relevant 161* alignments, and some other things. It tells the user how much of the 162* string should be eventually output and where. */ 163 164 /* PARAMETERS */ 165 /* INPUT args: */ 166 dcl (text_string char (*), /* the string to be clipped */ 167 alignment fixed bin, /* the desired alignment */ 168 charsizes (3) float bin, /* characteristic of the terminal */ 169 curpos (2) float bin, /* the current graphic position */ 170 /* parameter "limits" declared above */ 171 hw_origin fixed bin, /* where the hardware aligns its strings */ 172 /* OUTPUT args: */ 173 init_shift (2) float bin, /* user must shift this much before emitting string */ 174 str_origin fixed bin, /* first char of string to emit */ 175 str_len fixed bin) parameter; /* length of portion to emit */ 176 177 /* AUTOMATIC */ 178 179 dcl char_width float bin, 180 str_width float bin, 181 flatsize fixed bin, 182 realign (2) float bin, 183 string_pos (2) float bin; 184 185 /* BUILTINS */ 186 187 dcl (divide, hbound, lbound, length, mod, rank, substr) builtin; 188 189 190 str_origin = 1; 191 str_len = length (text_string); 192 init_shift = 0; 193 194 flatsize = compute_flatsize (text_string); 195 196 char_width = charsizes (2) + charsizes (3); 197 198 str_width = flatsize * char_width - charsizes (3); 199 /* subtract final intercharacter space */ 200 201 /* We do all out clipping computations from the upper left-hand corner of 202* the string (alignment 1). */ 203 204 realign (1) = -mod (alignment - 1, 3) / 2e0 * str_width; 205 realign (2) = divide (alignment - 1, 3, 17) / 2e0 * charsizes (1); 206 207 string_pos = curpos + realign; 208 209 /* If this string is clipped off the screen, just ignore it. */ 210 211 /* Check for top of string over top of screen... */ 212 213 if string_pos (2) > limits (2, 2) then str_len = 0; 214 215 /* ... bottom of string under bottom of screen... */ 216 217 else if string_pos (2) - charsizes (1) < limits (1, 2) then 218 str_len = 0; 219 220 /* ... left edge of string past right edge of screen... */ 221 222 else if string_pos (1) >= limits (2, 1) then str_len = 0; 223 224 /* ... and right edge of string past left edge of screen */ 225 226 else if string_pos (1) + str_width <= limits (1, 1) then 227 str_len = 0; 228 229 if str_len = 0 then return; 230 231 /* Now check for the case where we have to clip somewhere in mid-string. */ 232 233 /* Check for right edge of string past right edge of screen */ 234 235 if string_pos (1) + str_width > limits (2, 1) then 236 call clip_right_edge (text_string, str_len, string_pos (1), 237 limits (2, 1), charsizes (2), charsizes (3)); 238 239 /* and left edge of string past left edge of screen */ 240 241 else if string_pos (1) < limits (1, 1) then 242 call clip_left_edge (text_string, str_origin, str_len, 243 string_pos (1), limits (1, 1), charsizes (2), 244 charsizes (3)); 245 246 init_shift = string_pos - curpos; 247 if hw_origin = Left then 248 init_shift (2) = init_shift (2) - (charsizes (1) / 2e0); 249 else if hw_origin = Lower_left then 250 init_shift (2) = init_shift (2) - charsizes (1); 251 252 return; 253 254 compute_flatsize: proc (str) returns (fixed bin); 255 256 dcl str char (*) parameter; 257 258 /* AUTOMATIC */ 259 260 dcl flatsize fixed bin, 261 i fixed bin; 262 263 flatsize = 0; 264 265 do i = 1 to length (str); 266 flatsize = flatsize + 267 compute_colwidth (substr (str, i, 1), i); 268 end; 269 270 return (flatsize); 271 272 clip_right_edge: entry (str, strlen, startpos, edge, charwidth, charspace); 273 274 dcl (strlen fixed bin, 275 startpos float bin, 276 edge float bin, 277 (charwidth, 278 charspace) float bin) parameter; 279 280 dcl temp_float float bin, 281 fullwidth float bin; 282 283 /* set up a position counter; adjust to ignore trailing intercharacter space */ 284 285 temp_float = startpos - charspace; 286 fullwidth = charwidth + charspace; 287 288 do i = 1 to length (str) while (temp_float <= edge); 289 temp_float = temp_float + 290 compute_colwidth (substr (str, i, 1), i) * fullwidth; 291 end; 292 293 strlen = i - 2; 294 295 return; 296 297 clip_left_edge: 298 entry (str, strorig, strlen, startpos, edge, charwidth, charspace); 299 300 dcl strorig fixed bin parameter; 301 302 fullwidth = charwidth + charspace; 303 304 do i = 1 to length (str) while (startpos < edge); 305 startpos = startpos + 306 compute_colwidth (substr (str, i, 1), i) * fullwidth; 307 end; 308 309 strlen = strlen - i + 1; 310 strorig = i; 311 312 return; 313 314 compute_colwidth: proc (ch, idx) returns (fixed bin); 315 316 dcl ch char (1) parameter, 317 idx fixed bin parameter; 318 319 /* AUTOMATIC */ 320 321 dcl colwidth fixed bin, 322 i fixed bin; 323 324 /* CONSTANTS */ 325 326 dcl Columns_taken (0:127) fixed bin static options (constant) initial 327 ((8) 0, /* NUL- BEL */ 328 -1, 1, (6) 0, /* BS - 017 */ 329 (8) 0, /* DLE - ETX */ 330 (3) 0, -2, (4) 0, /* CAN - US */ 331 (95) 1, 0); /* printing chars and PAD */ 332 333 i = rank (ch); 334 if i > hbound (Columns_taken, 1) then 335 i = lbound (Columns_taken, 1); 336 colwidth = Columns_taken (i); 337 if colwidth = -2 then do; /* ESC-anything takes no column */ 338 colwidth = -1; 339 idx = idx + 1; 340 end; 341 342 return (colwidth); 343 end compute_colwidth; 344 end compute_flatsize; 345 346 end graphic_gsp_utility_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/18/82 1625.3 graphic_gsp_utility_.pl1 >dumps>old>recomp>graphic_gsp_utility_.pl1 19 1 03/27/82 0439.2 graphic_etypes.incl.pl1 >ldd>include>graphic_etypes.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. Columns_taken 000000 constant fixed bin(17,0) initial array dcl 326 ref 334 334 336 Left constant fixed bin(17,0) initial dcl 1-9 ref 247 Lower_left constant fixed bin(17,0) initial dcl 1-9 ref 249 Off_high constant bit(4) initial unaligned dcl 46 ref 108 148 Off_left constant bit(4) initial unaligned dcl 46 ref 105 127 Off_low constant bit(4) initial unaligned dcl 46 ref 107 141 Off_right constant bit(4) initial unaligned dcl 46 ref 106 134 alignment parameter fixed bin(17,0) dcl 166 ref 157 204 205 ch parameter char(1) unaligned dcl 316 ref 314 333 char_width 000102 automatic float bin(27) dcl 179 set ref 196* 198 charsizes parameter float bin(27) array dcl 166 set ref 157 196 196 198 205 217 235* 235* 241* 241* 247 249 charspace parameter float bin(27) dcl 274 ref 272 285 286 297 302 charwidth parameter float bin(27) dcl 274 ref 272 286 297 302 code 000124 automatic bit(4) unaligned dcl 101 in procedure "compute_code" set ref 103* 105* 106* 107* 107 108* 108 110 code parameter bit(4) unaligned dcl 115 in procedure "crush" set ref 113 127 131* 134 138* 141 145* 148 colwidth 000176 automatic fixed bin(17,0) dcl 321 set ref 336* 337 338* 342 coords parameter float bin(27) array dcl 98 ref 96 105 106 107 108 curpos parameter float bin(27) array dcl 166 ref 157 207 246 delta_x 000134 automatic float bin(27) dcl 121 set ref 124* 128 135 142 149 delta_y 000135 automatic float bin(27) dcl 121 set ref 125* 128 135 142 149 divide builtin function dcl 187 ref 205 edge parameter float bin(27) dcl 274 ref 272 288 297 304 flatsize 000104 automatic fixed bin(17,0) dcl 179 in procedure "graphic_gsp_utility_" set ref 194* 198 flatsize 000144 automatic fixed bin(17,0) dcl 260 in procedure "compute_flatsize" set ref 263* 266* 266 270 from parameter float bin(27) array dcl 30 set ref 21 51 54* 74* 88* from_code 000100 automatic bit(4) unaligned dcl 42 set ref 54* 59 73 74* fullwidth 000147 automatic float bin(27) dcl 280 set ref 286* 289 302* 305 goto_new_from parameter bit(1) unaligned dcl 30 set ref 21 60* 66* 76* 78* goto_new_to parameter bit(1) unaligned dcl 30 set ref 21 60* 90* 92* hbound builtin function dcl 187 ref 334 hw_origin parameter fixed bin(17,0) dcl 166 ref 157 247 249 i 000177 automatic fixed bin(17,0) dcl 321 in procedure "compute_colwidth" set ref 333* 334 334* 336 i 000145 automatic fixed bin(17,0) dcl 260 in procedure "compute_flatsize" set ref 265* 266 266 266* 288* 289 289 289* 293 304* 305 305 305* 309 310 idx parameter fixed bin(17,0) dcl 316 set ref 314 339* 339 init_shift parameter float bin(27) array dcl 166 set ref 157 192* 246* 247* 247 249* 249 lbound builtin function dcl 187 ref 334 length builtin function dcl 187 ref 191 265 288 304 limits parameter float bin(27) array dcl 30 in procedure "graphic_gsp_utility_" set ref 21 54* 55* 74* 88* 157 213 217 222 226 235 235* 241 241* limits parameter float bin(27) array dcl 98 in procedure "compute_code" ref 96 105 106 107 108 limits parameter float bin(27) array dcl 115 in procedure "crush" set ref 113 128 130 131* 135 137 138* 142 144 145* 149 151 mod builtin function dcl 187 ref 204 new_from parameter float bin(27) array dcl 30 set ref 21 51* 74* new_point parameter float bin(27) array dcl 115 set ref 113 123* 128* 128 128 130* 131* 135* 135 135 137* 138* 142* 142 142 144* 145* 149* 149 149 151* new_to parameter float bin(27) array dcl 30 set ref 21 52* 88* otherpoint parameter float bin(27) array dcl 115 ref 113 124 125 point parameter float bin(27) array dcl 115 ref 113 123 124 125 rank builtin function dcl 187 ref 333 realign 000106 automatic float bin(27) array dcl 179 set ref 204* 205* 207 shifting parameter bit(1) unaligned dcl 30 ref 21 66 87 startpos parameter float bin(27) dcl 274 set ref 272 285 297 304 305* 305 str parameter char unaligned dcl 256 ref 254 265 266 266 272 288 289 289 297 304 305 305 str_len parameter fixed bin(17,0) dcl 166 set ref 157 191* 213* 217* 222* 226* 229 235* 241* str_origin parameter fixed bin(17,0) dcl 166 set ref 157 190* 241* str_width 000103 automatic float bin(27) dcl 179 set ref 198* 204 226 235 string_pos 000110 automatic float bin(27) array dcl 179 set ref 207* 213 217 222 226 235 235* 241 241* 246 strlen parameter fixed bin(17,0) dcl 274 set ref 272 293* 297 309* 309 strorig parameter fixed bin(17,0) dcl 300 set ref 297 310* substr builtin function dcl 187 ref 266 266 289 289 305 305 temp_float 000146 automatic float bin(27) dcl 280 set ref 285* 288 289* 289 text_string parameter char unaligned dcl 166 set ref 157 191 194* 235* 241* to parameter float bin(27) array dcl 30 set ref 21 52 55* 74* 88* to_code 000101 automatic bit(4) unaligned dcl 42 set ref 55* 59 87 88 88* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. Any_device internal static fixed bin(17,0) initial dcl 1-9 Array internal static fixed bin(17,0) initial dcl 1-9 Blink internal static fixed bin(17,0) initial dcl 1-9 Blinking internal static fixed bin(17,0) initial dcl 1-9 Center internal static fixed bin(17,0) initial dcl 1-9 Clipping internal static fixed bin(17,0) initial dcl 1-9 Color internal static fixed bin(17,0) initial dcl 1-9 Dash_dotted internal static fixed bin(17,0) initial dcl 1-9 Dashed internal static fixed bin(17,0) initial dcl 1-9 Datablock internal static fixed bin(17,0) initial dcl 1-9 Dotted internal static fixed bin(17,0) initial dcl 1-9 Full_intensity internal static fixed bin(17,0) initial dcl 1-9 Half_intensity internal static fixed bin(17,0) initial dcl 1-9 Insensitive internal static fixed bin(17,0) initial dcl 1-9 Intensity internal static fixed bin(17,0) initial dcl 1-9 Invisible internal static fixed bin(17,0) initial dcl 1-9 Joystick internal static fixed bin(17,0) initial dcl 1-9 Keyboard internal static fixed bin(17,0) initial dcl 1-9 Light_pen internal static fixed bin(17,0) initial dcl 1-9 Linetype internal static fixed bin(17,0) initial dcl 1-9 List internal static fixed bin(17,0) initial dcl 1-9 Long_dashed internal static fixed bin(17,0) initial dcl 1-9 Lower_center internal static fixed bin(17,0) initial dcl 1-9 Lower_right internal static fixed bin(17,0) initial dcl 1-9 Mouse internal static fixed bin(17,0) initial dcl 1-9 Null internal static fixed bin(17,0) initial dcl 1-9 On_dup_error internal static fixed bin(17,0) initial dcl 1-9 On_dup_source internal static fixed bin(17,0) initial dcl 1-9 On_dup_target_then_nulls internal static fixed bin(17,0) initial dcl 1-9 On_dup_target_then_source internal static fixed bin(17,0) initial dcl 1-9 Point internal static fixed bin(17,0) initial dcl 1-9 Right internal static fixed bin(17,0) initial dcl 1-9 Rotation internal static fixed bin(17,0) initial dcl 1-9 Scaling internal static fixed bin(17,0) initial dcl 1-9 Sensitive internal static fixed bin(17,0) initial dcl 1-9 Sensitivity internal static fixed bin(17,0) initial dcl 1-9 Setpoint internal static fixed bin(17,0) initial dcl 1-9 Setposition internal static fixed bin(17,0) initial dcl 1-9 Shift internal static fixed bin(17,0) initial dcl 1-9 Solid internal static fixed bin(17,0) initial dcl 1-9 Steady internal static fixed bin(17,0) initial dcl 1-9 Symbol internal static fixed bin(17,0) initial dcl 1-9 Tablet_and_pen internal static fixed bin(17,0) initial dcl 1-9 Terminal_program internal static fixed bin(17,0) initial dcl 1-9 Text internal static fixed bin(17,0) initial dcl 1-9 Trackball internal static fixed bin(17,0) initial dcl 1-9 Upper_center internal static fixed bin(17,0) initial dcl 1-9 Upper_left internal static fixed bin(17,0) initial dcl 1-9 Upper_right internal static fixed bin(17,0) initial dcl 1-9 Vector internal static fixed bin(17,0) initial dcl 1-9 NAMES DECLARED BY EXPLICIT CONTEXT. clip_left_edge 001376 constant entry internal dcl 297 ref 241 clip_line 000251 constant entry external dcl 21 clip_right_edge 001273 constant entry internal dcl 272 ref 235 clip_text 000464 constant entry external dcl 157 compute_code 000774 constant entry internal dcl 96 ref 54 55 131 138 145 compute_colwidth 001502 constant entry internal dcl 314 ref 266 289 305 compute_flatsize 001217 constant entry internal dcl 254 ref 194 crush 001033 constant entry internal dcl 113 ref 74 88 graphic_gsp_utility_ 000234 constant entry external dcl 10 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1616 1626 1552 1626 Length 2014 1552 10 152 43 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME graphic_gsp_utility_ 229 external procedure is an external procedure. compute_code internal procedure shares stack frame of external procedure graphic_gsp_utility_. crush internal procedure shares stack frame of external procedure graphic_gsp_utility_. compute_flatsize internal procedure shares stack frame of external procedure graphic_gsp_utility_. compute_colwidth internal procedure shares stack frame of external procedure graphic_gsp_utility_. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME graphic_gsp_utility_ 000100 from_code graphic_gsp_utility_ 000101 to_code graphic_gsp_utility_ 000102 char_width graphic_gsp_utility_ 000103 str_width graphic_gsp_utility_ 000104 flatsize graphic_gsp_utility_ 000106 realign graphic_gsp_utility_ 000110 string_pos graphic_gsp_utility_ 000124 code compute_code 000134 delta_x crush 000135 delta_y crush 000144 flatsize compute_flatsize 000145 i compute_flatsize 000146 temp_float compute_flatsize 000147 fullwidth compute_flatsize 000176 colwidth compute_colwidth 000177 i compute_colwidth THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. fx1_to_fl2 return mod_fx1 signal ext_entry ext_entry_desc NO EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. NO EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 10 000233 11 000241 21 000242 51 000261 52 000270 54 000276 55 000310 59 000323 60 000332 61 000343 66 000344 73 000357 74 000361 76 000377 77 000404 78 000405 87 000411 88 000421 90 000442 91 000447 92 000450 94 000454 157 000455 190 000502 191 000505 192 000507 194 000522 196 000537 198 000544 204 000551 205 000564 207 000572 213 000606 217 000614 222 000621 226 000626 229 000632 235 000634 241 000675 246 000740 247 000755 249 000766 252 000773 96 000774 103 000776 105 000777 106 001005 107 001012 108 001022 110 001026 113 001033 123 001035 124 001043 125 001046 127 001052 128 001061 130 001067 131 001071 134 001104 135 001114 137 001124 138 001126 141 001140 142 001150 144 001160 145 001162 148 001174 149 001204 151 001214 154 001216 254 001217 263 001232 265 001233 266 001245 268 001257 270 001261 272 001273 285 001320 286 001323 288 001326 289 001344 291 001362 293 001364 295 001367 297 001376 302 001423 304 001426 305 001444 307 001462 309 001464 310 001470 312 001473 314 001502 333 001504 334 001512 336 001515 337 001520 338 001522 339 001524 342 001525 ----------------------------------------------------------- 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