ASSEMBLY LISTING OF SEGMENT >spec>install>1110>find_char_.alm ASSEMBLED ON: 11/11/89 0944.6 mst Sat OPTIONS USED: -target l68 list symbols ASSEMBLED BY: ALM Version 8.14 March 1989 ASSEMBLER CREATED: 06/09/89 1002.3 mst Fri 1 " *********************************************************** 2 " * * 3 " * Copyright, (C) Honeywell Bull Inc., 1987 * 4 " * * 5 " * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6 " * * 7 " * Copyright (c) 1972 by Massachusetts Institute of * 8 " * Technology and Honeywell Information Systems, Inc. * 9 " * * 10 " *********************************************************** 11 12 " HISTORY COMMENTS: 13 " 1) change(74-07-01,GDixon), approve(), audit(), install(): 14 " Create initial version of the program, called tct_. 15 " 2) change(75-09-25,GDixon), approve(), audit(), install(): 16 " Add $quote table segdef. 17 " 3) change(76-03-12,GDixon), approve(), audit(), install(): 18 " Add $verify, $reverse_verify, $search, and $reverse_search entrypoints. 19 " 4) change(86-02-05,GDixon), approve(86-05-16,MCR7357), 20 " audit(86-07-10,Farley), install(86-07-17,MR12.0-1097): 21 " Renamed subr from tct_ to find_char_. Renamed all entrypoints. 22 " Added the $make_table_of_chars_in_list and 23 " $make_table_of_chars_not_in_list entrypoints. 24 " Also fixed bug which prevents find_char_$last_in_table, 25 " $translate_last_in_table, $last_in_list and $last_not_in_list 26 " from working properly. 27 " END HISTORY COMMENTS 28 29 " * * * * * * * * * * * * * * ** * * * * * * * * * * * 30 " 31 " Name: find_char_ 32 " 33 " This subroutine uses the EIS test character and translate (TCT) 34 " instruction to perform the function of the PL/I search and verify builtins. 35 " The code uses either a pre-defined test/translate table, or it constructs 36 " one "on the fly". 37 " 38 " Entry: find_char_$first_in_table 39 " 40 " Function: This entry point implements the PL/I search builtin function 41 " with a predefined test/translate table. 42 " 43 " Syntax: 44 " dcl find_char_$first_in_table entry (char(*), char(512) aligned) 45 " returns (fixed bin(21)) reducible; 46 " index = find_char_$first_in_table (string, table); 47 " 48 " Arguments: 49 " string 50 " is the character string to be searched. (In) 51 " table 52 " is the translation table. (See Notes below.) (In) 53 " index 54 " is the result of the search. It is a PL/I string index (character 55 " position). (Out) 56 " 57 " Entry: find_char_$last_in_table 58 " 59 " Function: This entry point is like find_char_$first_in_table, but searches 60 " the string in reverse, from last character to first. A PL/I string index 61 " (character position relative to the beginning of the string) is returned. 62 " It performs the PL/I function: 63 " i = length(string) - search (reverse(string), table_chars) + 1 64 " [when char searched for is found in string] 65 " i = 0 [when char searched for is not found.] 66 " 67 " 68 " Syntax: 69 " dcl find_char_$last_in_table entry (char(*), char(512) aligned) 70 " returns (fixed bin(21)) reducible; 71 " index = find_char_$last_in_table (string, table); 72 " 73 " Arguments: 74 " string 75 " is the character string to be searched. (In) 76 " table 77 " is the translation table. (See Notes below.) (In) 78 " index 79 " is the result of the search. It is a PL/I string index (character 80 " position). (Out) 81 " 82 " Entry: find_char_$translate_first_in_table 83 " 84 " Function: This entry point performs the PL/I search function, but also 85 " returns the translate table entry for the character which stopped the search. 86 " See Notes below for a more explicit description of the returned 87 " character. 88 " 89 " Syntax: 90 " dcl find_char_$translate_first_in_table entry (char(*), 91 " char(512) aligned, fixed bin(21)) returns (char(1)); 92 " char = find_char_$translate_first_in_table (string, table, index); 93 " 94 " Arguments: 95 " string 96 " is the character string to be searched. (In) 97 " table 98 " is the translation table. (See Notes below.) (In) 99 " index 100 " is the result of the search. It is a PL/I string index (character 101 " position). (Out) 102 " char 103 " is the character from the translation table into which the indexed 104 " character of string has been translated. (Out) 105 " 106 " Entry: find_char_$translate_last_in_table 107 " 108 " Function: This entry is like find_char_$translate_first_in_table, but does 109 " the search function in reverse, from last char of string to first. 110 " 111 " Syntax: 112 " dcl find_char_$translate_last_in_table entry (char(*), 113 " char(512) aligned, fixed bin(21)) returns (char(1)); 114 " char = find_char_$translate_last_in_table (string, table, index); 115 " 116 " Arguments: 117 " string 118 " is the character string to be searched. (In) 119 " table 120 " is the translation table. (See Notes below.) (In) 121 " index 122 " is the result of the search. It is a PL/I string index (character 123 " position). (Out) 124 " char 125 " is the character from the translation table into which the indexed 126 " character of string has been translated. (Out) 127 " 128 " Entry: find_char_$first_in_list 129 " 130 " Function: This entry performs the PL/I function: 131 " index = search (string, chars); 132 " 133 " Syntax: 134 " dcl find_char_$first_in_list entry (char(*), char(*)) 135 " returns(fixed bin(21)) reducible; 136 " index = find_char_$first_in_list (string, search_list); 137 " 138 " Arguments: 139 " string 140 " is the character string to be searched. (In) 141 " search_list 142 " are characters to be found in the string. (In) 143 " index 144 " is the result of the search. It is the PL/I string index (character 145 " position) of the first occurrence of any of the search characters in 146 " string. (Out) 147 " 148 " Entry: find_char_$last_in_list 149 " 150 " Function: This entry returns the index (character position relative to the 151 " beginning of the string) of the rightmost occurrence of any of the characters 152 " being searched for. It performs the PL/I function: 153 " index = length(string) - search (reverse(string), chars) + 1 154 " [when char searched for is found in string] 155 " index = 0 [when char searched for is not found.] 156 " 157 " Syntax: 158 " dcl find_char_$last_in_list entry (char(*), char(*)) 159 " returns(fixed bin(21)) reducible; 160 " i = find_char_$last_in_list (string, search_list); 161 " 162 " Arguments: 163 " string 164 " is the character string to be searched. (In) 165 " search_list 166 " are characters to be found in the string. (In) 167 " index 168 " is the result of the search. It is the PL/I string index (character 169 " position) of the last occurrence of any of the search characters in 170 " string. (Out) 171 " 172 " Entry: find_char_$first_not_in_list 173 " 174 " Function: This entry performs the PL/I function: 175 " index = verify(string, chars) 176 " 177 " Syntax: 178 " dcl find_char_$first_not_in_list entry (char(*), char(*)) 179 " returns(fixed bin(21)) reducible; 180 " i = find_char_$first_not_in_list (string, verify_list); 181 " 182 " Arguments: 183 " string 184 " is the character string to be searched. (In) 185 " verify_list 186 " are characters whose existence in the string is to be verified. (In) 187 " index 188 " is the result of the verify. It is the PL/I string index (character 189 " position) of the first occurrence of a string character which is not 190 " an element in verify_list. (Out) 191 " 192 " Entry: find_char_$last_not_in_list 193 " 194 " Function: This entry returns the index (character position relative to the 195 " beginning of the string) of the rightmost occurrence of a char in string 196 " which is not an element of verify_chars. It performs the PL/I function: 197 " index = length(string) - verify (reverse(string), chars) + 1 198 " [when character not in chars is found in string] 199 " index = 0 [when character not in chars is not found in string.] 200 " 201 " Syntax: 202 " dcl find_char_$last_not_in_list entry (char(*), char(*)) 203 " returns(fixed bin(21)) reducible; 204 " i = find_char_$last_not_in_list (string, verify_list); 205 " 206 " Arguments: 207 " string 208 " is the character string to be searched. (In) 209 " verify_list 210 " are characters whose existence in the string is to be verified. (In) 211 " index 212 " is the result of the verify. It is the PL/I string index (character 213 " position) of the last occurrence of a string character which is not 214 " an element in verify_list. (Out) 215 " 216 " Entry: find_char_$make_table_of_chars_in_list 217 " 218 " Function: This entry constructs a test/translate table for use with the 219 " find_char_$first_in_table and find_char_$last_in_table entrypoints. 220 " Table entries corresponding to characters of search_list are marked with 221 " \777 in the search table. Other table entries are filled with \000. 222 " 223 " Syntax: 224 " dcl find_char_$make_table_of_chars_in_list (char(*), char(512) aligned); 225 " call find_char_$make_table_of_chars_in_list (search_list, table); 226 " 227 " Arguments: 228 " search_list 229 " is a string of characters whose corresponding entries are to be marked in 230 " the resulting translate table. (In) 231 " table 232 " is the translate table. (Out) 233 " 234 " Entry: find_char_$make_table_of_chars_not_in_list 235 " 236 " Function: This entry constructs a test/translate table for use with the 237 " find_char_$first_in_table and find_char_$last_in_table entrypoints. 238 " Table entries corresponding to characters of verify_list are marked with 239 " \000 in the search table. Other table entries are filled with \777. 240 " 241 " Syntax: 242 " dcl find_char_$make_table_of_chars_not_in_list 243 " (char(*), char(512) aligned); 244 " call find_char_$make_table_of_chars_not_in_list (verify_list, table); 245 " 246 " Arguments: 247 " verify_list 248 " is a string of characters whose corresponding entries are to remain 249 " unmarked in the resulting translate table. (In) 250 " table 251 " is the translate table. (Out) 252 " 253 " Notes 254 " 255 " The test/translate table is a fixed length character string. It 256 " should be 512 characters long to cover all possible Multics 257 " 9-bit byte values. 258 " 259 " The test/translate table consists of "\000" characters and 260 " characters which are not "\000". The search progresses as follows: 261 " 262 " 1) Examine the first (or next) character of the source string. 263 " If i is the index of the character being examined, then 264 " source_char = substr(string, i, 1) 265 " 2) For each source_char, examine its corresponding table_char: 266 " table_char = substr(table,rank(source_char)+1,1) 267 " 3) If table_char = "\000", then the test fails and the search 268 " continues with step 1. 269 " 4) If table_char ^= "\000", then the test succeeds and the search 270 " stops. The current value of i is returned as the index 271 " value. For the $translate entry points, table_char is returned 272 " as the char argument. 273 " 5) If the source string is exhausted before the test succeeds, then 274 " a value of 0 is returned as the index argument, and for the 275 " $translate entry point, "\000" is returned as the char argument. 276 " 277 " Table: find_char_$not_ascii_table 278 " 279 " This is a translation table which can be used to detect any 280 " non-ASCII characters in a character string. Non-ASCII characters 281 " are those in which one or both of the 2 leftmost bits of the 282 " 9-bit character byte are "1"b (i.e., character > "\177"). The 283 " first 128 values in the table are "\000". The next 384 table 284 " characters are set to their character offset within the table. 285 " This means that: 286 " substr(table,n+1,1) = "\000", for n: 000 <= n <= 127 287 " substr(table,n+1,1) = "\n", for n: 128 <= n <= 511 288 " 289 " * * * * * * * * * * * * * * ** * * * * * * * * * * * 290 291 " ----------------------------------------------------------------------------- 292 " Segname, and entrypoint definitions. 293 " ----------------------------------------------------------------------------- 294 000000 295 name find_char_ 296 000002 297 segdef first_in_table 000012 298 segdef last_in_table 000022 299 segdef translate_first_in_table 000034 300 segdef translate_last_in_table 301 000061 302 entry first_in_list 000105 303 entry first_not_in_list 000073 304 entry last_in_list 000120 305 entry last_not_in_list 000054 306 entry make_table_of_chars_in_list 000046 307 entry make_table_of_chars_not_in_list 308 000270 309 segdef not_ascii_table 310 311 " ----------------------------------------------------------------------------- 312 " Code for find_char_$first_in_table, $translate_first_in_table, 313 " $last_in_table, and $translate_last_in_table, $first_in_list, 314 " $first_not_in_list, $last_in_list and $last_not_in_list. 315 " ----------------------------------------------------------------------------- 316 317 " Register name assignments: 000000 318 equ arg_list,0 " pr0 -> argument list 000001 319 equ string,1 " pr1 -> string to be searched. 000002 320 equ search_list,2 " pr2 -> search_list, verify_list. 000003 321 equ table,3 " pr3 -> test/translate table. 000004 322 equ char,4 " pr4 -> value of test/translate table 323 " element corresponding to the 324 " string character found by tct. 000004 325 equ search_list_char,4 " pr4 -> a char from search_list. 000005 326 equ index,5 " pr5 -> character index of string 327 " character found by tct instr. 000006 328 equ auto_storage,6 " pr6 -> stack frame, containing 329 " storage for automatic vars. 330 000002 331 equ desc_offset,2 " x2 = word offset of 1st arg 332 " descriptor in arg_list. 000003 333 equ do_index,3 " x3 = a do group index. 000006 334 equ return_loc,6 " x6 = subroutine return location. 335 336 temp table_var(128) " automatic char(512) aligned table 337 " for use in tct/tctr instructions 338 " when $XXX_in_list make their 339 " own table. 340 temp search_list_char_var(1) 341 " automatic char(1) aligned word to 342 " hold one search_list char at 343 " a time so its rank can be computed. 344 000000 345 desc_length_mask: " ANDing mask to extract char string 000000 aa 000077 777777 346 oct 000077777777 " length from an argument descriptor. 000001 347 string_index_mask: " ANDing mask to extract char offset 000001 aa 000777 777777 348 oct 000777777777 " from result of TCT instruction. 349 350 " ----------------------------------------------------------------------------- 351 " find_char_$first_in_table: proc (string, table) returns (index); 352 " ----------------------------------------------------------------------------- 000002 353 first_in_table: 000002 aa 000010 2220 03 354 ldx desc_offset,8,du " set offset of first argument 355 " descriptor from head of arglist. 000003 0a 000210 7060 00 356 tsx return_loc,get_table_parms 357 " get parm ptr/lengths 000004 0a 000254 7060 00 358 tsx return_loc,tct " execute tct instruction 000005 0a 000010 6070 00 359 ttf first_in_table_match 360 " Branch if tct found a match 000006 aa 5 00000 4501 00 361 stz index|0 " tct failed... store 0 in result 000007 aa 7 00044 7101 20 362 short_return 363 000010 364 first_in_table_match: " tct succeeded 000010 0a 000236 7060 00 365 tsx return_loc,set_tct_index_parm 000011 aa 7 00044 7101 20 366 short_return 367 368 " ----------------------------------------------------------------------------- 369 " find_char_$last_in_table: entry (string, table) returns (index); 370 " ----------------------------------------------------------------------------- 000012 371 last_in_table: 000012 aa 000010 2220 03 372 ldx desc_offset,8,du " set offset of 1st arg desc 000013 0a 000210 7060 00 373 tsx return_loc,get_table_parms 374 " get parm ptr/lengths 000014 0a 000262 7060 00 375 tsx return_loc,tctr " execute tctr instruction 000015 0a 000020 6070 00 376 ttf last_in_table_match " Branch if tctr found a match. 377 000016 aa 5 00000 4501 00 378 stz index|0 " tctr failed... store 0 in result 000017 aa 7 00044 7101 20 379 short_return 380 000020 381 last_in_table_match: " tctr succeeded 000020 0a 000243 7060 00 382 tsx return_loc,set_tctr_index_parm 000021 aa 7 00044 7101 20 383 short_return 384 385 " ----------------------------------------------------------------------------- 386 " find_char_$translate_first_in_table: entry (string, table, index) 387 " returns (char); 388 " ----------------------------------------------------------------------------- 000022 389 translate_first_in_table: 000022 aa 000012 2220 03 390 ldx desc_offset,10,du " set offset of first argument 391 " descriptor 000023 0a 000210 7060 00 392 tsx return_loc,get_table_parms 393 " get parm ptr/lengths 000024 0a 000254 7060 00 394 tsx return_loc,tct " execute tct instruction 000025 0a 000031 6070 00 395 ttf translate_first_in_table_match 396 " Branch if tct found a match. 000026 aa 5 00000 4501 00 397 stz index|0 " tct failed... store 0 in result 000027 0a 000230 7060 00 398 tsx return_loc,set_char_parm 399 " move \000 from index into char parm. 000030 aa 7 00044 7101 20 400 short_return " tct failed. 401 000031 402 translate_first_in_table_match: " tct succeeded. 000031 0a 000230 7060 00 403 tsx return_loc,set_char_parm 404 " move translated char into char parm. 000032 0a 000236 7060 00 405 tsx return_loc,set_tct_index_parm 000033 aa 7 00044 7101 20 406 short_return 407 408 " ----------------------------------------------------------------------------- 409 " find_char_$translate_last_in_table: entry (string, table, index) 410 " returns (char); 411 " ----------------------------------------------------------------------------- 000034 412 translate_last_in_table: 000034 aa 000012 2220 03 413 ldx desc_offset,10,du " set offset of 1st arg desc 000035 0a 000210 7060 00 414 tsx return_loc,get_table_parms 415 " get parm ptr/lengths 000036 0a 000262 7060 00 416 tsx return_loc,tctr " execute tctr instruction 000037 0a 000043 6070 00 417 ttf translate_last_in_table_match 418 " Branch if tctr found a match. 000040 aa 5 00000 4501 00 419 stz index|0 " tctr failed... store 0 in result 000041 0a 000230 7060 00 420 tsx return_loc,set_char_parm 421 " move \000 from index into char parm. 000042 aa 7 00044 7101 20 422 short_return 423 000043 424 translate_last_in_table_match: 000043 0a 000230 7060 00 425 tsx return_loc,set_char_parm 426 " move translated char into char parm. 000044 0a 000243 7060 00 427 tsx return_loc,set_tctr_index_parm 000045 aa 7 00044 7101 20 428 short_return 429 430 " ----------------------------------------------------------------------------- 431 " make_table_of_chars_not_in_list: entry (verify_list, table); 432 " ----------------------------------------------------------------------------- 000046 433 make_table_of_chars_not_in_list: 000046 aa 000260 6270 00 434 push " Need automatic variables when 000047 aa 7 00040 2721 20 435 " filling the search table. 000050 0a 000174 7060 00 436 tsx return_loc,get_make_table_parms 000051 0a 000133 7060 00 437 tsx return_loc,fill_table_from_list 000052 0a 000222 7060 00 438 tsx return_loc,invert_table_entries 000053 aa 7 00042 7101 20 439 return 440 441 " ----------------------------------------------------------------------------- 442 " make_table_of_chars_in_list: entry (search_list, table); 443 " ----------------------------------------------------------------------------- 000054 444 make_table_of_chars_in_list: 000054 aa 000260 6270 00 445 push " Need automatic variables when 000055 aa 7 00040 2721 20 446 " filling the search table. 000056 0a 000174 7060 00 447 tsx return_loc,get_make_table_parms 000057 0a 000133 7060 00 448 tsx return_loc,fill_table_from_list 000060 aa 7 00042 7101 20 449 return 450 451 " ----------------------------------------------------------------------------- 452 " first_in_list: entry (string, search_list) returns (index); 453 " ----------------------------------------------------------------------------- 000061 454 first_in_list: 000061 aa 000260 6270 00 455 push " Need automatic variables when 000062 aa 7 00040 2721 20 456 " filling the search table. 000063 0a 000154 7060 00 457 tsx return_loc,get_list_parms 000064 0a 000133 7060 00 458 tsx return_loc,fill_table_from_list 459 " build table from search_list 000065 0a 000254 7060 00 460 tsx return_loc,tct " execute tct instruction 000066 0a 000071 6070 00 461 ttf first_in_list_match " Branch if it succeeds. 000067 aa 5 00000 4501 00 462 stz index|0 " tct failed... store 0 result. 000070 aa 7 00042 7101 20 463 return 464 000071 465 first_in_list_match: " tct succeeded 000071 0a 000236 7060 00 466 tsx return_loc,set_tct_index_parm 000072 aa 7 00042 7101 20 467 return 468 469 " ----------------------------------------------------------------------------- 470 " last_in_list: entry (string, search_list) returns (index); 471 " ----------------------------------------------------------------------------- 000073 472 last_in_list: 000073 aa 000260 6270 00 473 push " Need automatic variables when 000074 aa 7 00040 2721 20 474 " filling the search table. 000075 0a 000154 7060 00 475 tsx return_loc,get_list_parms 000076 0a 000133 7060 00 476 tsx return_loc,fill_table_from_list 477 " build table from search_list 000077 0a 000262 7060 00 478 tsx return_loc,tctr " execute tctr instruction 000100 0a 000103 6070 00 479 ttf last_in_list_match 480 " Branch if it succeeds. 000101 aa 5 00000 4501 00 481 stz index|0 " tctr failed... store 0 result. 000102 aa 7 00042 7101 20 482 return 483 000103 484 last_in_list_match: " tctr succeeded 000103 0a 000243 7060 00 485 tsx return_loc,set_tctr_index_parm 000104 aa 7 00042 7101 20 486 return 487 488 " ----------------------------------------------------------------------------- 489 " first_not_in_list: entry (string, verify_list) returns (index); 490 " ----------------------------------------------------------------------------- 000105 491 first_not_in_list: 000105 aa 000260 6270 00 492 push " Need automatic variables when 000106 aa 7 00040 2721 20 493 " filling the search table. 000107 0a 000154 7060 00 494 tsx return_loc,get_list_parms 495 " get parms 000110 0a 000133 7060 00 496 tsx return_loc,fill_table_from_list 497 " build table from verify_list 000111 0a 000222 7060 00 498 tsx return_loc,invert_table_entries 499 " convert search table to verify table 000112 0a 000254 7060 00 500 tsx return_loc,tct " execute tct instruction 000113 0a 000116 6070 00 501 ttf first_not_in_list_match 502 " Branch if it succeeds. 000114 aa 5 00000 4501 00 503 stz index|0 " tct failed... store 0 result. 000115 aa 7 00042 7101 20 504 return 505 000116 506 first_not_in_list_match: " tct succeeded 000116 0a 000236 7060 00 507 tsx return_loc,set_tct_index_parm 000117 aa 7 00042 7101 20 508 return 509 510 " ----------------------------------------------------------------------------- 511 " last_not_in_list: entry (string, verify_list) returns (index); 512 " ----------------------------------------------------------------------------- 000120 513 last_not_in_list: 000120 aa 000260 6270 00 514 push " Need automatic variables 000121 aa 7 00040 2721 20 515 " filling the search table. 000122 0a 000154 7060 00 516 tsx return_loc,get_list_parms 000123 0a 000133 7060 00 517 tsx return_loc,fill_table_from_list 518 " build table from verify_list 000124 0a 000222 7060 00 519 tsx return_loc,invert_table_entries 520 " convert search table to verify table 000125 0a 000262 7060 00 521 tsx return_loc,tctr " execute tctr instruction 000126 0a 000131 6070 00 522 ttf last_not_in_list_match 523 " Branch if it succeeds. 000127 aa 5 00000 4501 00 524 stz index|0 " tctr failed... store 0 result. 000130 aa 7 00042 7101 20 525 return 526 000131 527 last_not_in_list_match: " tctr succeeded 000131 0a 000243 7060 00 528 tsx return_loc,set_tctr_index_parm 000132 aa 7 00042 7101 20 529 return 530 531 " ============================================================================= 532 " QUICK-BLOCK SUBROUTINES WHICH ACTUALLY DO THE WORK 533 " ============================================================================= 534 535 " ----------------------------------------------------------------------------- 536 " Fill test/translate table, using specs in search_list string. 537 " In: pr(table) -> translate/test table to be filled in. 538 " pr(search_list) -> search_list character string to be turned 539 " into a table. 540 " x(do_index) = length(search_list). 541 " pr(search_list_char) -> space to hold one char from search list, 542 " so its rank can be computed. 543 " x(return_loc) = location this subroutine should return to. 544 " Out: pr(table) -> filled-in translate/test table. 545 " ----------------------------------------------------------------------------- 000133 546 fill_table_from_list: 000133 aa 000000 0110 03 547 even 000134 aa 0 00100 1005 00 548 mlr (pr),(pr),fill(000) " fill table with 000's 000135 aa 300000 000000 549 desc9a table|0,0 000136 aa 300000 001000 550 desc9a table|0,512 551 000137 aa 4 00000 4501 00 552 stz search_list_char|0 " clear search_list_char variable 000140 aa 000000 1030 03 553 loop: cmpx do_index,0,du " exit loop when search_list exhausted 000141 aa 000000 6000 16 554 tze 0,return_loc 000142 aa 000001 1630 03 555 sbx do_index,1,du " decrement length(search_list) 000143 aa 000000 0110 03 556 even 000144 aa 0 00100 1005 13 557 mlr (pr,x3),(pr),fill(000) 000145 aa 200000 000001 558 desc9a search_list|0,1 " search_list_char = 559 " substr(search_list,do_index,1) 000146 aa 400000 600001 560 desc9a search_list_char|0(3),1 000147 aa 4 00000 2361 00 561 ldq search_list_char|0 562 even 000150 aa 7 77106 1005 00 563 mlr (pr),(pr,ql),fill(777) 000151 aa 300000 000000 564 desc9a table|0,0 " move 777 into 000152 aa 300000 000001 565 desc9a table|0,1 " table(rank(search_list_char)) 000153 0a 000140 7100 00 566 tra loop 567 568 " ----------------------------------------------------------------------------- 569 " Get addr/length of string, search_list or verify_list and index parms 570 " In: pr(arg_list) -> the argument list. 571 " x(return_loc) = location this subroutine should return to. 572 " Out: pr(string) -> string to be searched. 573 " pr(search_list) -> chars in search_list or verify_list. 574 " pr(index) -> character index within string. 575 " a-reg = length(string). 576 " x(do-index) = length(search_list). 577 " pr(table) -> test/translate table. 578 " pr(search_list_char) -> automatic variable to hold one 579 " search_list char. 580 " ----------------------------------------------------------------------------- 000154 581 get_list_parms: 000154 aa 0 00002 3515 20 582 epp string,arg_list|2,* " get addr(string) [arg1] 000155 aa 0 00004 3521 20 583 epp search_list,arg_list|4,* 584 " get addr(search_list) [arg2] 000156 aa 0 00006 3715 20 585 epp index,arg_list|6,* " get addr(index) [arg3] 586 " get length(string) into a-reg. 000157 aa 000010 2220 03 587 ldx desc_offset,8,du " offset of arg1 descriptor in 000160 aa 0 00000 7231 00 588 lxl3 arg_list|0 " arg_list. 000161 aa 000004 1030 03 589 cmpx3 4,du " does arglist have parent ptr? 000162 aa 000002 6000 04 590 tze 2,ic " 4 means no parent ptr. 000163 aa 000002 0620 03 591 adx desc_offset,2,du " otherwise, skip parent ptr. 000164 aa 0 00000 2351 32 592 lda arg_list|0,desc_offset* 593 " get length of string in a-reg. 000165 0a 000000 3750 00 594 ana desc_length_mask " mask out all but length. 000166 aa 0 00002 2361 32 595 ldq arg_list|2,desc_offset* 000167 0a 000000 3760 00 596 anq desc_length_mask " get length(search_list) into q-reg. 000170 aa 000000 6230 06 597 eax do_index,0,ql " get length(search_list) into x3. 000171 aa 6 00050 3535 00 598 epp table,auto_storage|table_var 000172 aa 6 00250 3701 00 599 epp search_list_char,auto_storage|search_list_char_var 600 " get pointers to automatic variables 000173 aa 000000 7100 16 601 tra 0,return_loc 602 603 " ----------------------------------------------------------------------------- 604 " Get addr/length of search_list or verify_list parm, and output table parm. 605 " In: pr(arg_list) -> the argument list. 606 " x(return_loc) = location this subroutine should return to. 607 " Out: pr(search_list) -> chars in search_list, verify_list. 608 " pr(table) -> test/translate table. 609 " pr(search_list_char) -> automatic variable to hold one search_list 610 " char. 611 " x(do_index) = length(search_list). 612 " ----------------------------------------------------------------------------- 000174 613 get_make_table_parms: 000174 aa 0 00002 3521 20 614 epp search_list,arg_list|2,* 615 " get addr(search_list) [arg1] 000175 aa 0 00004 3535 20 616 epp table,arg_list|4,* " get addr(table) [arg2] 000176 aa 000006 2220 03 617 ldx desc_offset,6,du " get length(search_list) from its arg 000177 aa 0 00000 7231 00 618 lxl3 arg_list|0 " descriptor into a-reg. 000200 aa 000004 1030 03 619 cmpx3 4,du " compensate if arglist has parent 000201 aa 000002 6000 04 620 tze 2,ic " ptr. 4 means no parent ptr. 000202 aa 000002 0620 03 621 adx desc_offset,2,du " if there, skip parent ptr. 000203 aa 0 00000 2351 32 622 lda arg_list|0,desc_offset* 623 " load 1st arg desc into a-reg. 000204 0a 000000 3750 00 624 ana desc_length_mask " mask off all but the length. 000205 aa 000000 6230 05 625 eax do_index,0,al " get length(search_list) into x3. 000206 aa 6 00250 3701 00 626 epp search_list_char,auto_storage|search_list_char_var 627 " get addr(search_list_char), making it 000207 aa 000000 7100 16 628 tra 0,return_loc " point to an automatic variable. 629 630 " ----------------------------------------------------------------------------- 631 " Get pointers/length of find_char_$XXX_in_table parm: string, table, index. 632 " In: pr(arg_list) -> the argument list. 633 " x(desc_offset) = offset in arg list of arg1 descriptor. 634 " x(return_loc) = location this subroutine should return to. 635 " Out: pr(string) -> string to be searched. 636 " pr(table) -> test/translate table. 637 " pr(index) -> character index within string. 638 " a-reg = length(string). 639 " ----------------------------------------------------------------------------- 000210 640 get_table_parms: 000210 aa 0 00002 3515 20 641 epp string,arg_list|2,* " get addr(string) [arg1] 000211 aa 0 00004 3535 20 642 epp table,arg_list|4,* " get addr(table) [arg2] 000212 aa 0 00006 3715 20 643 epp index,arg_list|6,* " get addr(index) [arg3] 644 " get length(string) into a-reg. 000213 aa 0 00000 7231 00 645 lxl3 arg_list|0 " compensate if arg list has parent 000214 aa 000004 1030 03 646 cmpx3 4,du " ptr. 000215 aa 000002 6000 04 647 tze 2,ic " 4 means no parent ptr. 000216 aa 000002 0620 03 648 adx desc_offset,2,du " else, skip over parent ptr. 000217 aa 0 00000 2351 32 649 lda arg_list|0,desc_offset* 650 " load descriptor for string. 000220 0a 000000 3750 00 651 ana desc_length_mask " mask out all but string length from 652 " descriptor. 000221 aa 000000 7100 16 653 tra 0,return_loc 654 655 " ----------------------------------------------------------------------------- 656 " Convert from a search table to a verify table by inverting all table bits. 657 " In: pr(table) -> the search table (char(512) aligned) 658 " x(return_loc) = location this subroutine should return to. 659 " Out: pr(table) -> the verify table 660 " ----------------------------------------------------------------------------- 000222 661 invert_table_entries: " invert bytes in test/translate table 000222 aa 011000 7270 07 662 lxl7 (512*9),dl " (make off bytes on, on bytes off) 000223 aa 000000 0110 03 663 even " since: verify(x) <=> search(^x) 000014 664 bool invert,014 000224 aa 0 14140 0605 40 665 csl (pr,rl),(pr,rl),fill(0),bool(invert) 000225 aa 300000 000017 666 descb table|0,x7 " See fill_table_from_list below. 000226 aa 300000 000017 667 descb table|0,x7 " Remember that the search table has 000227 aa 000000 7100 16 668 tra 0,return_loc " bytes containing either \000 or 669 " \777. ^\777 = \000, ^\000 = \777 670 671 " ----------------------------------------------------------------------------- 672 " Move translated char (char selected from table by tct/tctr instruction) 673 " from first byte of index (where tct/tctr put it) into translate table 674 " char output parm (arg4). 675 " In: pr(arg_list) -> the argument list. 676 " pr(index) -> result of TCT or TCTR instruction: character offset 677 " from right end of string, preceded by char 678 " from selected table entry. 679 " x(return_loc) = location this subroutine should return to. 680 " Out: pr(char) -> char parm in which table char is returned. 681 " ----------------------------------------------------------------------------- 000230 682 set_char_parm: 000230 aa 0 00010 3701 20 683 epp char,arg_list|8,* " get addr(char) [arg4] 000231 aa 000000 0110 03 684 even 000232 aa 0 00100 1005 00 685 mlr (pr),(pr),fill(000) " move translated char to 4th arg 000233 aa 500000 000001 686 desc9a index|0,1 " TCT result: 1st byte is trans_char 000234 aa 400000 000001 687 desc9a char|0,1 " 4th arg 000235 aa 000000 7100 16 688 tra 0,return_loc 689 690 " ----------------------------------------------------------------------------- 691 " Adjust index to remove translated char, and convert byte offset to a 692 " byte index. 693 " In: pr(index) -> result of TCT or TCTR instruction: character offset 694 " from right end of string, preceded by char 695 " from selected table entry. 696 " x(return_loc) = location this subroutine should return to. 697 " Out: pr(index) -> character index within string of selected char. 698 " ----------------------------------------------------------------------------- 000236 699 set_tct_index_parm: 000236 aa 5 00000 2361 00 700 ldq index|0 " load string offset 000237 0a 000001 3760 00 701 anq string_index_mask " mask away translated char 000240 aa 000001 0760 07 702 adq 1,dl " make string offset into index 000241 aa 5 00000 7561 00 703 stq index|0 " store index 000242 aa 000000 7100 16 704 tra 0,return_loc 705 706 " ----------------------------------------------------------------------------- 707 " Adjust index to remove translated char, convert byte offset to a 708 " byte index, and shift from byte-index-relative-to-right-end of string to 709 " byte-index-relative-to-left-end of string. 710 " In: pr(index) -> result of TCT or TCTR instruction: character offset 711 " from right end of string, preceded by char 712 " from selected table entry. 713 " x(return_loc) = location this subroutine should return to. 714 " Out: pr(index) -> character index within string of selected char. 715 " ----------------------------------------------------------------------------- 000243 716 set_tctr_index_parm: 000243 aa 5 00000 2361 00 717 ldq index|0 " load string reverse_offset 000244 0a 000001 3760 00 718 anq string_index_mask " mask away translated char 000245 aa 000001 0760 07 719 adq 1,dl " make string reverse_offset into 720 " reverse_index 000246 aa 5 00000 7561 00 721 stq index|0 " store reverse_index 000247 aa 5 00000 1751 00 722 sba index|0 " index = length(string) 000250 aa 000001 0750 07 723 ada 1,dl " - reverse_index + 1 000251 aa 5 00000 7551 00 724 sta index|0 000252 aa 000000 7100 16 725 tra 0,return_loc 726 727 " ----------------------------------------------------------------------------- 728 " Execute tct instruction on string, using table. 729 " In: pr(string) -> string to be searched. 730 " a-reg = length(string). 731 " pr(table) -> test/translate table. 732 " x(return_loc) = location this subroutine should return to. 733 " Out: pr(index) -> result of TCT instruction: character offset 734 " within string, preceded by char from selected 735 " table entry. 736 " ----------------------------------------------------------------------------- 000253 aa 000000 0110 03 737 even 000254 aa 0 00000 1645 40 738 tct: tct (pr,rl),fill(000) " test and translate, using the table 000255 aa 100000 000005 739 desc9a string|0,al " string,length-in-'a'-register 000256 aa 3 00000 0001 00 740 arg table|0 " table 000257 aa 5 00000 0001 00 741 arg index|0 " result of find_char_ stored in 742 " index parm 000260 aa 000000 7100 16 743 tra 0,return_loc 744 745 " ----------------------------------------------------------------------------- 746 " Execute tctr instruction on string, using table. 747 " In: pr(string) -> string to be searched. 748 " a-reg = length(string). 749 " pr(table) -> test/translate table. 750 " x(return_loc) = location this subroutine should return to. 751 " Out: pr(index) -> result of TCTR instruction: character offset 752 " from right end of string, preceded by char 753 " from selected table entry. 754 " ----------------------------------------------------------------------------- 000261 aa 000000 0110 03 755 even 000262 aa 0 00000 1655 40 756 tctr: tctr (pr,rl),fill(000) " test/translate in reverse 000263 aa 100000 000005 757 desc9a string|0,al " string, length in 'a'-reg 000264 aa 3 00000 0001 00 758 arg table|0 " table 000265 aa 5 00000 0001 00 759 arg index|0 " result 000266 aa 000000 7100 16 760 tra 0,return_loc 761 000267 aa 000000 0110 03 762 even 000270 aa 000000 000000 763 not_ascii_table: oct 000000000000,000000000000 " 000-007 000271 aa 000000 000000 000272 aa 000000 000000 764 oct 000000000000,000000000000 " 010-017 000273 aa 000000 000000 000274 aa 000000 000000 765 oct 000000000000,000000000000 " 020-027 000275 aa 000000 000000 000276 aa 000000 000000 766 oct 000000000000,000000000000 " 030-037 000277 aa 000000 000000 000300 aa 000000 000000 767 oct 000000000000,000000000000 " 040-047 000301 aa 000000 000000 000302 aa 000000 000000 768 oct 000000000000,000000000000 " 050-057 000303 aa 000000 000000 000304 aa 000000 000000 769 oct 000000000000,000000000000 " 060-067 000305 aa 000000 000000 000306 aa 000000 000000 770 oct 000000000000,000000000000 " 070-077 000307 aa 000000 000000 000310 aa 000000 000000 771 oct 000000000000,000000000000 " 100-107 000311 aa 000000 000000 000312 aa 000000 000000 772 oct 000000000000,000000000000 " 110-117 000313 aa 000000 000000 000314 aa 000000 000000 773 oct 000000000000,000000000000 " 120-127 000315 aa 000000 000000 000316 aa 000000 000000 774 oct 000000000000,000000000000 " 130-137 000317 aa 000000 000000 000320 aa 000000 000000 775 oct 000000000000,000000000000 " 140-147 000321 aa 000000 000000 000322 aa 000000 000000 776 oct 000000000000,000000000000 " 150-157 000323 aa 000000 000000 000324 aa 000000 000000 777 oct 000000000000,000000000000 " 160-167 000325 aa 000000 000000 000326 aa 000000 000000 778 oct 000000000000,000000000000 " 170-177 000327 aa 000000 000000 000330 aa 200201 202203 779 oct 200201202203,204205206207 " 200-207 000331 aa 204205 206207 000332 aa 210211 212213 780 oct 210211212213,214215216217 " 210-217 000333 aa 214215 216217 000334 aa 220221 222223 781 oct 220221222223,224225226227 " 220-227 000335 aa 224225 226227 000336 aa 230231 232233 782 oct 230231232233,234235236237 " 230-237 000337 aa 234235 236237 000340 aa 240241 242243 783 oct 240241242243,244245246247 " 240-247 000341 aa 244245 246247 000342 aa 250251 252253 784 oct 250251252253,254255256257 " 250-257 000343 aa 254255 256257 000344 aa 260261 262263 785 oct 260261262263,264265266267 " 260-267 000345 aa 264265 266267 000346 aa 270271 272273 786 oct 270271272273,274275276277 " 270-277 000347 aa 274275 276277 000350 aa 300301 302303 787 oct 300301302303,304305306307 " 300-307 000351 aa 304305 306307 000352 aa 310311 312313 788 oct 310311312313,314315316317 " 310-317 000353 aa 314315 316317 000354 aa 320321 322323 789 oct 320321322323,324325326327 " 320-327 000355 aa 324325 326327 000356 aa 330331 332333 790 oct 330331332333,334335336337 " 330-337 000357 aa 334335 336337 000360 aa 340341 342343 791 oct 340341342343,344345346347 " 340-347 000361 aa 344345 346347 000362 aa 350351 352353 792 oct 350351352353,354355356357 " 350-357 000363 aa 354355 356357 000364 aa 360361 362363 793 oct 360361362363,364365366367 " 360-367 000365 aa 364365 366367 000366 aa 370371 372373 794 oct 370371372373,374375376377 " 370-377 000367 aa 374375 376377 000370 aa 400401 402403 795 oct 400401402403,404405406407 " 400-407 000371 aa 404405 406407 000372 aa 410411 412413 796 oct 410411412413,414415416417 " 410-417 000373 aa 414415 416417 000374 aa 420421 422423 797 oct 420421422423,424425426427 " 420-427 000375 aa 424425 426427 000376 aa 430431 432433 798 oct 430431432433,434435436437 " 430-437 000377 aa 434435 436437 000400 aa 440441 442443 799 oct 440441442443,444445446447 " 440-447 000401 aa 444445 446447 000402 aa 450451 452453 800 oct 450451452453,454455456457 " 450-457 000403 aa 454455 456457 000404 aa 460461 462463 801 oct 460461462463,464465466467 " 460-467 000405 aa 464465 466467 000406 aa 470471 472473 802 oct 470471472473,474475476477 " 470-477 000407 aa 474475 476477 000410 aa 500501 502503 803 oct 500501502503,504505506507 " 500-507 000411 aa 504505 506507 000412 aa 510511 512513 804 oct 510511512513,514515516517 " 510-517 000413 aa 514515 516517 000414 aa 520521 522523 805 oct 520521522523,524525526527 " 520-527 000415 aa 524525 526527 000416 aa 530531 532533 806 oct 530531532533,534535536537 " 530-537 000417 aa 534535 536537 000420 aa 540541 542543 807 oct 540541542543,544545546547 " 540-547 000421 aa 544545 546547 000422 aa 550551 552553 808 oct 550551552553,554555556557 " 550-557 000423 aa 554555 556557 000424 aa 560561 562563 809 oct 560561562563,564565566567 " 560-567 000425 aa 564565 566567 000426 aa 570571 572573 810 oct 570571572573,574575576577 " 570-577 000427 aa 574575 576577 000430 aa 600601 602603 811 oct 600601602603,604605606607 " 600-607 000431 aa 604605 606607 000432 aa 610611 612613 812 oct 610611612613,614615616617 " 610-617 000433 aa 614615 616617 000434 aa 620621 622623 813 oct 620621622623,624625626627 " 620-627 000435 aa 624625 626627 000436 aa 630631 632633 814 oct 630631632633,634635636637 " 630-637 000437 aa 634635 636637 000440 aa 640641 642643 815 oct 640641642643,644645646647 " 640-647 000441 aa 644645 646647 000442 aa 650651 652653 816 oct 650651652653,654655656657 " 650-657 000443 aa 654655 656657 000444 aa 660661 662663 817 oct 660661662663,664665666667 " 660-667 000445 aa 664665 666667 000446 aa 670671 672673 818 oct 670671672673,674675676677 " 670-677 000447 aa 674675 676677 000450 aa 700701 702703 819 oct 700701702703,704705706707 " 700-707 000451 aa 704705 706707 000452 aa 710711 712713 820 oct 710711712713,714715716717 " 710-717 000453 aa 714715 716717 000454 aa 720721 722723 821 oct 720721722723,724725726727 " 720-727 000455 aa 724725 726727 000456 aa 730731 732733 822 oct 730731732733,734735736737 " 730-737 000457 aa 734735 736737 000460 aa 740741 742743 823 oct 740741742743,744745746747 " 740-747 000461 aa 744745 746747 000462 aa 750751 752753 824 oct 750751752753,754755756757 " 750-757 000463 aa 754755 756757 000464 aa 760761 762763 825 oct 760761762763,764765766767 " 760-767 000465 aa 764765 766767 000466 aa 770771 772773 826 oct 770771772773,774775776777 " 770-777 000467 aa 774775 776777 827 828 end ENTRY SEQUENCES 000470 5a 000074 0000 00 000471 aa 7 00046 2721 20 000472 0a 000061 7100 00 000473 5a 000064 0000 00 000474 aa 7 00046 2721 20 000475 0a 000105 7100 00 000476 5a 000055 0000 00 000477 aa 7 00046 2721 20 000500 0a 000073 7100 00 000501 5a 000045 0000 00 000502 aa 7 00046 2721 20 000503 0a 000120 7100 00 000504 5a 000033 0000 00 000505 aa 7 00046 2721 20 000506 0a 000054 7100 00 000507 5a 000020 0000 00 000510 aa 7 00046 2721 20 000511 0a 000046 7100 00 NO LITERALS NAME DEFINITIONS FOR ENTRY POINTS AND SEGDEFS 000512 5a 000003 000000 000513 5a 000153 600000 000514 aa 000000 000000 000515 55 000011 000002 000516 5a 000002 400003 000517 55 000006 000011 000520 aa 012 146 151 156 000521 aa 144 137 143 150 000522 aa 141 162 137 000 000523 55 000020 000003 000524 0a 000270 400000 000525 55 000014 000003 000526 aa 017 156 157 164 not_ascii_table 000527 aa 137 141 163 143 000530 aa 151 151 137 164 000531 aa 141 142 154 145 000532 55 000033 000011 000533 0a 000510 500000 000534 55 000023 000003 000535 aa 037 155 141 153 make_table_of_chars_not_in_list 000536 aa 145 137 164 141 000537 aa 142 154 145 137 000540 aa 157 146 137 143 000541 aa 150 141 162 163 000542 aa 137 156 157 164 000543 aa 137 151 156 137 000544 aa 154 151 163 164 000545 55 000045 000020 000546 0a 000505 500000 000547 55 000036 000003 000550 aa 033 155 141 153 make_table_of_chars_in_list 000551 aa 145 137 164 141 000552 aa 142 154 145 137 000553 aa 157 146 137 143 000554 aa 150 141 162 163 000555 aa 137 151 156 137 000556 aa 154 151 163 164 000557 55 000055 000033 000560 0a 000502 500000 000561 55 000050 000003 000562 aa 020 154 141 163 last_not_in_list 000563 aa 164 137 156 157 000564 aa 164 137 151 156 000565 aa 137 154 151 163 000566 aa 164 000 000 000 000567 55 000064 000045 000570 0a 000477 500000 000571 55 000060 000003 000572 aa 014 154 141 163 last_in_list 000573 aa 164 137 151 156 000574 aa 137 154 151 163 000575 aa 164 000 000 000 000576 55 000074 000055 000577 0a 000474 500000 000600 55 000067 000003 000601 aa 021 146 151 162 first_not_in_list 000602 aa 163 164 137 156 000603 aa 157 164 137 151 000604 aa 156 137 154 151 000605 aa 163 164 000 000 000606 55 000103 000064 000607 0a 000471 500000 000610 55 000077 000003 000611 aa 015 146 151 162 first_in_list 000612 aa 163 164 137 151 000613 aa 156 137 154 151 000614 aa 163 164 000 000 000615 55 000114 000074 000616 0a 000034 400000 000617 55 000106 000003 000620 aa 027 164 162 141 translate_last_in_table 000621 aa 156 163 154 141 000622 aa 164 145 137 154 000623 aa 141 163 164 137 000624 aa 151 156 137 164 000625 aa 141 142 154 145 000626 55 000126 000103 000627 0a 000022 400000 000630 55 000117 000003 000631 aa 030 164 162 141 translate_first_in_table 000632 aa 156 163 154 141 000633 aa 164 145 137 146 000634 aa 151 162 163 164 000635 aa 137 151 156 137 000636 aa 164 141 142 154 000637 aa 145 000 000 000 000640 55 000135 000114 000641 0a 000012 400000 000642 55 000131 000003 000643 aa 015 154 141 163 last_in_table 000644 aa 164 137 151 156 000645 aa 137 164 141 142 000646 aa 154 145 000 000 000647 55 000144 000126 000650 0a 000002 400000 000651 55 000140 000003 000652 aa 016 146 151 162 first_in_table 000653 aa 163 164 137 151 000654 aa 156 137 164 141 000655 aa 142 154 145 000 000656 55 000002 000135 000657 6a 000000 400002 000660 55 000147 000003 000661 aa 014 163 171 155 symbol_table 000662 aa 142 157 154 137 000663 aa 164 141 142 154 000664 aa 145 000 000 000 DEFINITIONS HASH TABLE 000665 aa 000000 000015 000666 5a 000135 000000 000667 aa 000000 000000 000670 5a 000114 000000 000671 5a 000020 000000 000672 5a 000055 000000 000673 5a 000011 000000 000674 5a 000074 000000 000675 5a 000103 000000 000676 5a 000144 000000 000677 5a 000045 000000 000700 5a 000033 000000 000701 5a 000064 000000 000702 5a 000126 000000 NO EXTERNAL NAMES NO TRAP POINTER WORDS TYPE PAIR BLOCKS 000703 aa 000001 000000 000704 aa 000000 000000 INTERNAL EXPRESSION WORDS 000705 aa 000000 000000 LINKAGE INFORMATION 000000 aa 000000 000000 000001 0a 000512 000000 000002 aa 000000 000000 000003 aa 000000 000000 000004 aa 000000 000000 000005 aa 000000 000000 000006 22 000010 000010 000007 a2 000000 000000 SYMBOL INFORMATION SYMBOL TABLE HEADER 000000 aa 000000 000001 000001 aa 163171 155142 000002 aa 164162 145145 000003 aa 000000 000010 000004 aa 000000 117244 000005 aa 361023 525721 000006 aa 000000 117547 000007 aa 253241 220451 000010 aa 141154 155040 000011 aa 040040 040040 000012 aa 000024 000040 000013 aa 000034 000040 000014 aa 000044 000100 000015 aa 000002 000002 000016 aa 000064 000000 000017 aa 000000 000172 000020 aa 000000 000103 000021 aa 000142 000137 000022 aa 000164 000103 000023 aa 000064 000000 000024 aa 101114 115040 000025 aa 126145 162163 000026 aa 151157 156040 000027 aa 070056 061064 000030 aa 040115 141162 000031 aa 143150 040061 000032 aa 071070 071040 000033 aa 040040 040040 000034 aa 110151 162156 000035 aa 145151 163145 000036 aa 156056 123171 000037 aa 163115 141151 000040 aa 156164 056141 000041 aa 040040 040040 000042 aa 040040 040040 000043 aa 040040 040040 000044 aa 055164 141162 000045 aa 147145 164040 000046 aa 154066 070040 000047 aa 040040 040040 000050 aa 040040 040040 000051 aa 040040 040040 000052 aa 040040 040040 000053 aa 040040 040040 000054 aa 040040 040040 000055 aa 040040 040040 000056 aa 040154 151163 000057 aa 164040 163171 000060 aa 155142 157154 000061 aa 163040 040040 000062 aa 040040 040040 000063 aa 040040 040040 000064 aa 000000 000001 000065 aa 000000 000001 000066 aa 000072 000041 000067 aa 175453 017775 000070 aa 000000 117547 000071 aa 176771 600000 000072 aa 076163 160145 >spec>install>1110>find_char_.alm 000073 aa 143076 151156 000074 aa 163164 141154 000075 aa 154076 061061 000076 aa 061060 076146 000077 aa 151156 144137 000100 aa 143150 141162 000101 aa 137056 141154 000102 aa 155040 040040 MULTICS ASSEMBLY CROSS REFERENCE LISTING Value Symbol Source file Line number 0 arg_list find_char_: 318, 582, 583, 585, 588, 592, 595, 614, 616, 618, 622, 641, 642, 643, 645, 649, 683. 6 auto_storage find_char_: 328, 598, 599, 626. 4 char find_char_: 322, 683, 687. 0 desc_length_mask find_char_: 345, 594, 596, 624, 651. 2 desc_offset find_char_: 331, 354, 372, 390, 413, 587, 591, 592, 595, 617, 621, 622, 648, 649. 3 do_index find_char_: 333, 553, 555, 597, 625. 133 fill_table_from_list find_char_: 437, 448, 458, 476, 496, 517, 546. 61 first_in_list find_char_: 302, 454. 71 first_in_list_match find_char_: 461, 465. 2 first_in_table find_char_: 297, 353. 10 first_in_table_match find_char_: 359, 364. 105 first_not_in_list find_char_: 303, 491. 116 first_not_in_list_match find_char_: 501, 506. 154 get_list_parms find_char_: 457, 475, 494, 516, 581. 174 get_make_table_parms find_char_: 436, 447, 613. 210 get_table_parms find_char_: 356, 373, 392, 414, 640. 5 index find_char_: 326, 361, 378, 397, 419, 462, 481, 503, 524, 585, 643, 686, 700, 703, 717, 721, 722, 724, 741, 759. 14 invert find_char_: 664, 665. 222 invert_table_entries find_char_: 438, 498, 519, 661. 73 last_in_list find_char_: 304, 472. 103 last_in_list_match find_char_: 479, 484. 12 last_in_table find_char_: 298, 371. 20 last_in_table_match find_char_: 376, 381. 120 last_not_in_list find_char_: 305, 513. 131 last_not_in_list_match find_char_: 522, 527. 140 loop find_char_: 553, 566. 54 make_table_of_chars_in_list find_char_: 306, 444. 46 make_table_of_chars_not_in_list find_char_: 307, 433. 270 not_ascii_table find_char_: 309, 763. 6 return_loc find_char_: 334, 356, 358, 365, 373, 375, 382, 392, 394, 398, 403, 405, 414, 416, 420, 425, 427, 436, 437, 438, 447, 448, 457, 458, 460, 466, 475, 476, 478, 485, 494, 496, 498, 500, 507, 516, 517, 519, 521, 528, 554, 601, 628, 653, 668, 688, 704, 725, 743, 760. 2 search_list find_char_: 320, 558, 583, 614. 4 search_list_char find_char_: 325, 552, 560, 561, 599, 626. 250 search_list_char_var find_char_: 340, 599, 626. 230 set_char_parm find_char_: 398, 403, 420, 425, 682. 243 set_tctr_index_parm find_char_: 382, 427, 485, 528, 716. 236 set_tct_index_parm find_char_: 365, 405, 466, 507, 699. 1 string find_char_: 319, 582, 641, 739, 757. 1 string_index_mask find_char_: 347, 701, 718. 3 table find_char_: 321, 549, 550, 564, 565, 598, 616, 642, 666, 667, 740, 758. 50 table_var find_char_: 336, 598. 254 tct find_char_: 358, 394, 460, 500, 738. 262 tctr find_char_: 375, 416, 478, 521, 756. 22 translate_first_in_table find_char_: 299, 389. 31 translate_first_in_table_match find_char_: 395, 402. 34 translate_last_in_table find_char_: 300, 412. 43 translate_last_in_table_match find_char_: 417, 424. NO FATAL ERRORS ----------------------------------------------------------- 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