COMPILATION LISTING OF SEGMENT cobol_lexeme Compiled by: Multics PL/I Compiler, Release 31b, of April 24, 1989 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 05/24/89 1026.1 mst Wed Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) BULL HN Information Systems Inc., 1989 * 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 13 14 /****^ HISTORY COMMENTS: 15* 1) change(89-04-23,Zimmerman), approve(89-04-23,MCR8089), 16* audit(89-05-05,RWaters), install(89-05-24,MR12.3-1048): 17* MCR8089 cobol_lexeme.pl1 Remove requirement for write permission to input 18* files. 19* END HISTORY COMMENTS */ 20 21 22 /* Modified on 12/20/84 by FCH, [5.3-2], source prog with r access caused abort */ 23 /* Modified on 10/24/83 by FCH, [5.3-1], ignore COPY in ID, phx14180(BUG599) */ 24 /* Modified on 02/26/79 by FCH, [4.0-1], qualified copy file names */ 25 /* Created for Version 4.0 */ 26 27 28 29 30 31 32 /* format: style3 */ 33 cobol_lexeme: 34 proc (lexeme_ptr); 35 36 declare lexeme_ptr ptr; 37 38 dcl (addr, fixed, index, null, substr, translate, unspec) 39 builtin; 40 41 declare hcs_$fs_get_path_name 42 entry (ptr, char (*), fixed bin, char (*), fixed bin (35)); 43 declare hcs_$initiate_count entry (char (*), char (*), char (*), fixed bin (24), fixed bin (2), ptr, fixed bin (35)); 44 declare hcs_$set_bc_seg entry (ptr, fixed bin (24), fixed bin (35)); 45 46 declare (env_ptr, s_ptr) ptr, 47 sname char (*); 48 declare bc fixed bin (24), 49 code fixed bin (35); 50 declare lc fixed bin; 51 declare ch char (1), 52 ch2 char (2), 53 ch_val fixed bin; 54 declare key_word char (32) varying; 55 declare saved_offset fixed bin (35); 56 declare (cont, new_line, more, scan_mode) 57 bit (1); 58 declare (res, dec_pt_count, sign_count) 59 fixed bin, 60 mask bit (8); 61 declare (i, j) fixed bin, 62 p ptr; 63 declare file_name char (44); 64 declare (old, new, size, tok_size) 65 fixed bin; 66 declare dir_name char (168), 67 entry_name char (32); 68 declare (e_offset, e_span) fixed bin (35); 69 70 declare 1 b, 71 2 line fixed bin, 72 2 column fixed bin, 73 2 type fixed bin, 74 2 offset fixed bin (35), 75 2 span fixed bin, 76 2 string_size fixed bin (35), 77 2 string_cap fixed bin, 78 2 string_ptr ptr, 79 2 string char (32) varying, 80 2 col_7 char (1); 81 82 declare ldn fixed bin; 83 declare last_token_space bit (1); 84 85 declare error_table_$zero_length_seg 86 fixed bin (35) ext; 87 declare error_table_$segknown 88 fixed bin (35) ext; 89 90 declare ss char (1000000) based; 91 declare sa (1000000) char (1) based; 92 declare bit9 bit (9) based; 93 94 dcl alloc_1 char (lexeme_env.alloc.cap1) based (lexeme_env.alloc.ptr1); 95 dcl alloc_2 char (lexeme_env.alloc.cap2) based (lexeme_env.alloc.ptr2); 96 97 98 declare mem_tab (0:511) bit (8) based (mem_tab_ptr); 99 declare x (0:511) fixed bin (8) based (x_ptr); 100 101 declare expand_cobol_source_area 102 area based (ecs_ptr); 103 104 declare find_include_file_$initiate_count 105 entry (char (*), ptr, char (*), fixed bin (24), ptr, fixed bin (35)); 106 107 /* 108* ignore space tokens, separator comma and 109* separator semi-colon 110* */ 111 112 call get_token; 113 114 ch = lexeme_env.token.string_ptr -> sa (1); 115 116 do while (lexeme_env.error = 0 117 & (lexeme_env.token.type = 1 118 | (lexeme_env.token.type = 4 & lexeme_env.token.string_size = 1 & (ch = ";" | ch = ",")))); 119 120 call get_token; 121 122 ch = lexeme_env.token.string_ptr -> sa (1); 123 124 end; 125 126 return; /* 127* initiate usage of cobol_lexeme.pl1 128* */ 129 open: 130 entry (lexeme_ptr); 131 132 allocate mem_tab in (expand_cobol_source_area); 133 134 do i = 0 by 1 to 127; 135 mem_tab (i) = m_t (i); 136 end; 137 138 do i = 128 by 1 to 511; 139 mem_tab (i) = "0"b; 140 end; 141 142 allocate x in (expand_cobol_source_area); 143 144 do i = 0 by 1 to 127; 145 x (i) = x_i (i); 146 end; 147 148 do i = 128 by 1 to 511; 149 x (i) = 10; 150 end; 151 152 /*5.3-1]*/ 153 state = 1; 154 tf = "0"b; 155 156 return; /* 157* terminate usage of cobol_lexeme.pl1 158* */ 159 close: 160 entry (lexeme_ptr); 161 162 free mem_tab; 163 free x; 164 165 166 return; 167 168 /* 169* initialize scanning of source file 170* */ 171 172 envinit: 173 entry (lexeme_ptr); 174 175 /*[4.0-1]*/ 176 call set_bc (lexeme_env.source_table.loc); /*[4.0-1]*/ 177 return; 178 179 set: 180 entry (lexeme_ptr, sname, s_ptr); 181 182 file_name = sname; 183 i = 44; 184 185 do while (i > 0 & substr (file_name, i, 1) = " "); 186 187 i = i - 1; 188 189 end; 190 191 if i > 11 192 then if substr (file_name, i - 10, 11) = ".incl.cobol" 193 then do; 194 call find_include_file_$initiate_count ("cobol", s_ptr, sname, bc, lexeme_env.source_table.loc, 195 code); 196 197 if code = error_table_$zero_length_seg 198 then lexeme_env.error = 2; 199 else call env_set; 200 201 return; 202 end; 203 204 lexeme_env.source_table.loc = s_ptr; 205 206 207 /*[4.0-1]*/ 208 call set_bc (lexeme_env.source_table.loc); /*[4.0-1]*/ 209 return; 210 211 set_bc: 212 proc (p); /*[4.0-1]*/ 213 dcl p ptr; 214 215 call hcs_$fs_get_path_name (p, dir_name, ldn, entry_name, code); 216 call hcs_$initiate_count (dir_name, entry_name, "", bc, 1, p, code); 217 218 if code = error_table_$segknown 219 then code = 0; 220 221 call env_set; 222 223 /*[4.0-1]*/ 224 end; 225 226 env_set: 227 proc; /*[4.0-1]*/ 228 dcl ch char (1), 229 p ptr; 230 231 232 /*[4.0-1]*/ 233 if code = 0 /*[4.0-1]*/ 234 then do; 235 i, j = divide (bc, 9, 31, 0); /*[4.0-1]*/ 236 p = lexeme_env.source_table.loc; /*[4.0-1]*/ 237 ch = p -> sa (j); 238 239 /*[4.0-1]*/ 240 do while (ch ^= " 241 "); 242 243 /*[4.0-1]*/ 244 j = j - 1; /*[4.0-1]*/ 245 ch = p -> sa (j); 246 247 /*[4.0-1]*/ 248 end; 249 250 /*[4.0-1]*/ 251 call hcs_$set_bc_seg (p, j * 9, code); 252 253 /*[5.3-2]*/ 254 call env_init; /*[5.3-2]*/ 255 return; 256 257 /*[4.0-1]*/ 258 end; 259 260 261 /*[4.0-1]*/ 262 lexeme_env.error = 2; 263 264 end; 265 266 env_init: 267 proc; 268 269 lexeme_env.source_table.offset = 1; 270 lexeme_env.source_table.line = 0; 271 lexeme_env.current_line.loc = null (); 272 lexeme_env.next_line.loc = null (); 273 addr (lexeme_env.indicators) -> bit9 = "01"b; 274 275 lexeme_env.alloc.cap1 = 512; /*[4.0-1]*/ 276 lexeme_env.alloc.parity = 0; 277 278 allocate alloc_1 in (expand_cobol_source_area); 279 280 lexeme_env.token.string_cap = 512; 281 lexeme_env.token.string_ptr = lexeme_env.alloc.ptr1; 282 lexeme_env.source_table.size = j; 283 284 call get_line; 285 286 end; 287 288 find_copy: 289 entry (lexeme_ptr); 290 291 key_word = "copy"; 292 293 call seek_word; 294 295 return; /* scan to the word "replace" */ 296 297 find_replace: 298 entry (lexeme_ptr); /* scan to the word "copy" */ 299 300 301 key_word = "replace"; 302 303 call seek_word; 304 305 return; 306 307 /* scan to closing pseudo-text delimiter */ 308 309 find_pseudo_text: 310 entry (lexeme_ptr); 311 312 lexeme_env.pseudo_text = 2; 313 314 call get_token; 315 316 if lexeme_env.error ^= 0 317 then return; 318 319 if lexeme_env.token.type = 4 320 then do; 321 if lexeme_env.token.string = "==" 322 then do; 323 lexeme_env.token.span = 0; 324 return; 325 end; 326 end; 327 else if lexeme_env.token.type = 1 /* space token */ 328 then do; 329 lexeme_env.token.type = 6; 330 b = lexeme_env.token; 331 332 call get_token; 333 334 if lexeme_env.error ^= 0 335 then return; 336 337 if lexeme_env.token.type = 4 338 then if lexeme_env.token.string = "==" 339 then do; 340 lexeme_env.token = b; 341 return; 342 end; 343 end; 344 345 lexeme_env.token.type = 6; 346 b = lexeme_env.token; 347 348 do while ("1"b); 349 350 call get_token; 351 352 if lexeme_env.error ^= 0 353 then go to fpt_1; 354 355 e_offset = lexeme_env.token.offset; 356 357 if lexeme_env.token.type = 1 358 then do; 359 call get_token; 360 361 if lexeme_env.error ^= 0 362 then go to fpt_1; 363 364 end; 365 366 if lexeme_env.token.type = 4 367 then if lexeme_env.token.string = "==" 368 then go to fpt_2; 369 end; 370 371 fpt_1: 372 lexeme_env.token = b; 373 return; 374 375 fpt_2: 376 lexeme_env.token = b; 377 lexeme_env.token.span = e_offset - b.offset; 378 lexeme_env.pseudo_text = 1; 379 380 return; 381 382 /* ignore space tokens */ 383 384 text_word: 385 entry (lexeme_ptr); 386 387 call get_token; 388 389 do while (lexeme_env.error = 0 & lexeme_env.token.type = 1); 390 391 call get_token; 392 393 end; 394 395 return; 396 397 /* 398* find the next token 399* */ 400 401 token: 402 entry (lexeme_ptr); 403 404 call get_token; 405 406 return; 407 408 get_token: 409 proc; 410 411 if lexeme_env.current_line.length = 0 412 then do; 413 lexeme_env.error = 1; 414 res = 1; 415 end; 416 417 else do; 418 419 lexeme_env.error = 0; 420 421 422 dec_pt_count, sign_count = 0; 423 lexeme_env.token.line = lexeme_env.source_table.line; 424 lexeme_env.token.column = lexeme_env.current_line.column; 425 lexeme_env.token.offset = lexeme_env.current_line.offset + lexeme_env.current_line.column - 1; 426 lexeme_env.token.span, lexeme_env.token.string_size = 0; 427 428 if lexeme_env.current_line.size >= 7 429 then lexeme_env.token.col_7 = lexeme_env.current_line.loc -> sa (7); 430 431 if lexeme_env.current_line.column < 8 432 then do; 433 lexeme_env.token.type = 1; 434 435 if lexeme_env.current_line.length < 8 436 then do; 437 lexeme_env.token.span = 438 lexeme_env.current_line.length - lexeme_env.current_line.column; 439 lexeme_env.current_line.column = lexeme_env.current_line.length; 440 end; 441 else do; 442 lexeme_env.token.span = 8 - lexeme_env.current_line.column; 443 lexeme_env.current_line.column = 8; 444 end; 445 446 call space; 447 res = 1; 448 end; 449 else do; 450 451 ch = lexeme_env.current_line.loc -> sa (lexeme_env.current_line.column); 452 453 if ch = " " | ch = " 454 " 455 then do; 456 lexeme_env.token.type = 1; 457 458 call space; 459 460 res = 1; 461 end; 462 else res = 2; 463 464 end; 465 466 end; 467 468 go to st (res); 469 470 st (1): 471 return; 472 473 st (2): 474 go to l (x (fixed (unspec (ch), 15))); 475 476 477 /* 478* cobol word 479* */ 480 481 l (1): 482 lexeme_env.token.type = 3; 483 word: 484 mask = "1"b; 485 486 call swm; 487 488 call look; 489 490 go to w (res); 491 492 w (1): 493 wd_1: 494 if lexeme_env.token.string_ptr -> sa (lexeme_env.token.string_size) = "-" 495 then lexeme_env.token.type = 5; 496 497 if lexeme_env.indicators.lc 498 then substr (lexeme_env.token.string_ptr -> ss, 1, lexeme_env.token.string_size) = 499 translate (substr (lexeme_env.token.string_ptr -> ss, 1, lexeme_env.token.string_size), 500 lower_case_alphabet); 501 502 ss1: 503 if lexeme_env.token.string_size <= 32 504 then lexeme_env.token.string = substr (lexeme_env.token.string_ptr -> ss, 1, lexeme_env.token.string_size); 505 506 507 return; 508 509 w (2): 510 if lexeme_env.current_line.column + 1 < lexeme_env.current_line.length 511 then if substr (lexeme_env.current_line.loc -> ss, lexeme_env.current_line.column + 1, 2) = "==" 512 then go to wd_1; 513 514 go to comm; 515 w (3): 516 go to comm; 517 518 519 /* 520* numeric literal 521* */ 522 523 l (2): 524 lexeme_env.token.type = 2; 525 526 num_lit: 527 mask = "01"b; 528 529 call swm; 530 531 call look; 532 533 go to nl1 (res); 534 535 nl1 (1): 536 return; 537 nl1 (2): 538 if dec_pt_count > 0 539 then go to comm; 540 541 if ch = ";" 542 then go to comm; 543 544 call move_char; 545 546 dec_pt_count = 1; 547 548 go to num_lit; 549 550 nl1 (3): 551 if ch = "-" | ("1"b & mem_tab (fixed (unspec (ch), 15))) 552 then if dec_pt_count = 0 & sign_count = 0 553 then do; 554 lexeme_env.token.type = 3; 555 go to word; 556 end; 557 go to comm; 558 559 /* 560* " 561* */ 562 l (3): 563 lexeme_env.token.type = 2; 564 565 call move_char; 566 567 mask = "0000001"b; 568 al_1: 569 call swnm; 570 571 if lexeme_env.current_line.loc -> sa (lexeme_env.current_line.column) = " 572 " 573 then do; 574 call cont_lit; 575 576 go to al1 (res); 577 578 al1 (1): 579 al1 (2): 580 go to comm; 581 al1 (3): 582 lexeme_env.token.span = lexeme_env.token.span + 1; 583 584 go to al_1; 585 586 end; 587 588 call move_lit_char; 589 590 al_2: 591 call look; 592 593 go to al2 (res); 594 595 al2 (1): 596 if ch = " 597 " 598 then do; 599 call cont_lit; 600 601 go to al21 (res); 602 603 al21 (1): 604 al21 (2): 605 go to ss1; 606 607 al21 (3): 608 lexeme_env.token.span = lexeme_env.token.span + 1; 609 go to al_2; 610 611 end; 612 613 go to ss1; 614 615 al2 (2): 616 go to ss1; 617 618 al2 (3): 619 al_3: 620 call swnm; 621 622 if lexeme_env.current_line.loc -> sa (lexeme_env.current_line.column) = " 623 " 624 then do; 625 call cont_lit; 626 go to al3 (res); 627 628 al3 (1): 629 al3 (2): 630 go to comm; 631 632 al3 (3): 633 go to al_3; 634 635 end; 636 637 638 go to al_1; 639 640 /* 641* ,; 642* */ 643 l (5): 644 lexeme_env.token.type = 4; 645 646 call move_char; 647 648 call look; 649 650 go to sep (res); 651 652 sep (1): 653 go to ss1; 654 sep (2): 655 if "01"b & mem_tab (fixed (unspec (ch), 15)) 656 then do; 657 dec_pt_count = 1; 658 lexeme_env.token.type = 2; 659 go to num_lit; 660 end; 661 662 go to comm; 663 664 sep (3): 665 go to comm; 666 667 /* 668* +- 669* */ 670 l (6): 671 l (18): 672 sign_count = 1; 673 lexeme_env.token.type = 3; 674 675 call move_char; 676 677 call look; 678 679 go to sgn (res); 680 681 sgn (1): 682 lexeme_env.token.type = 3; 683 go to ss1; 684 sgn (2): 685 go to comm; 686 687 sgn (3): 688 if "01"b & mem_tab (fixed (unspec (ch), 15)) 689 then do; 690 lexeme_env.token.type = 2; 691 go to num_lit; 692 end; 693 694 go to comm; 695 696 /* 697* * 698* */ 699 l (7): 700 lexeme_env.token.type = 3; 701 702 call move_char; 703 704 call look; 705 706 go to ask (res); 707 708 ask (1): 709 go to ss1; 710 ask (2): 711 go to comm; 712 713 ask (3): 714 if ch = "*" 715 then do; 716 call move_char; 717 718 call look; 719 720 go to exp (res); 721 722 exp (1): 723 go to ss1; 724 exp (2): 725 exp (3): 726 go to comm; 727 728 end; 729 730 go to comm; 731 732 /* 733* 734* */ 735 l (9): 736 l (16): 737 l (17): 738 lexeme_env.token.type = 3; 739 740 dlm: 741 call move_char; 742 743 dlm_1: 744 call look; 745 746 go to wd (res); 747 748 wd (1): 749 go to ss1; 750 wd (2): 751 wd (3): 752 go to comm; 753 754 /* 755* other characters 756* */ 757 l (8): 758 l (10): 759 comm: 760 lexeme_env.token.type = 5; 761 com_ent: 762 mask = "00000001"b; 763 764 call swnm; 765 766 if new_line 767 then do; 768 call merge; 769 770 if cont 771 then do; 772 cont = "0"b; 773 go to com_ent; 774 end; 775 end; 776 777 if lexeme_env.current_line.column >= 9 778 then do; 779 if lexeme_env.token.string_size > 2 780 then do; 781 782 if lexeme_env.indicators.copy_replace & lexeme_env.pseudo_text = 2 783 then do; 784 785 if substr (lexeme_env.current_line.loc -> ss, lexeme_env.current_line.column - 2, 786 2) = "==" 787 then do; 788 lexeme_env.token.span = lexeme_env.token.span - 2; 789 lexeme_env.token.string_size = lexeme_env.token.string_size - 2; 790 lexeme_env.current_line.column = lexeme_env.current_line.column - 2; 791 end; 792 793 end; 794 795 end; 796 end; 797 798 return; 799 800 /* 801* ( 802* */ 803 l (11): 804 lexeme_env.token.type = 4; 805 806 call move_char; 807 808 go to ss1; 809 810 /* 811* ) 812* */ 813 l (13): 814 lexeme_env.token.type = 4; 815 816 call move_char; 817 818 go to ss1; 819 820 821 /* 822* . 823* */ 824 l (14): 825 lexeme_env.token.type = 4; 826 827 call move_char; 828 829 call look; 830 831 go to per (res); 832 833 per (1): 834 go to ss1; 835 per (2): 836 if "01"b & mem_tab (fixed (unspec (ch), 15)) 837 then do; 838 dec_pt_count = 1; 839 lexeme_env.token.type = 2; 840 go to num_lit; 841 end; 842 843 go to comm; 844 845 per (3): 846 go to comm; 847 848 /* 849* = 850* */ 851 l (15): 852 lexeme_env.token.type = 4; 853 854 if lexeme_env.current_line.column < lexeme_env.current_line.size 855 then do; 856 call move_char; 857 858 ch = lexeme_env.current_line.loc -> sa (lexeme_env.current_line.column); 859 860 if ch = "=" 861 then do; 862 call move_char; 863 864 if ^lexeme_env.indicators.copy_replace 865 then go to dlm_1; 866 867 go to ptxt (lexeme_env.pseudo_text); 868 869 ptxt (1): 870 lexeme_env.pseudo_text = 2; 871 go to ss1; 872 873 ptxt (2): 874 ptxt (3): 875 lexeme_env.pseudo_text = 1; 876 877 go to dlm_1; 878 end; 879 880 go to dlm_1; 881 882 end; 883 884 go to dlm; 885 886 end; 887 888 cont_lit: 889 proc; /* res = 1 not continuation card 890* res = 2 first non blank character character not QUOTE 891* res = 3 first non blank character character QUOTE not followed by CR 892* */ 893 call next_cont; 894 895 if ^cont 896 then do; 897 res = 1; 898 return; 899 end; 900 901 call get_line; 902 903 do while ("1"b); 904 905 if j >= 13 906 then do; 907 908 p = lexeme_env.current_line.loc; 909 j = 12; 910 911 do while (p -> sa (j) = " "); 912 913 j = j + 1; 914 915 end; 916 917 if p -> sa (j) ^= """" 918 then do; 919 res = 2; 920 return; 921 end; 922 923 if p -> sa (j + 1) ^= " 924 " 925 then do; 926 lexeme_env.token.span = lexeme_env.token.span + j; 927 lexeme_env.current_line.column = j + 1; 928 res = 3; 929 930 return; 931 end; 932 933 end; 934 935 call next_cont; 936 937 if ^cont 938 then do; 939 res = 1; 940 return; 941 end; 942 943 944 lexeme_env.token.span = lexeme_env.token.span + lexeme_env.current_line.length; 945 946 call get_line; 947 948 end; 949 end; 950 951 space: 952 proc; /* form the space token */ 953 do while ("1"b); 954 955 i = lexeme_env.current_line.column; /* find non-blank character */ 956 p = lexeme_env.current_line.loc; 957 958 do while (p -> sa (i) = " "); 959 960 i = i + 1; 961 962 end; 963 964 lexeme_env.token.span = lexeme_env.token.span + i - lexeme_env.current_line.column; 965 /* adjust span */ 966 lexeme_env.current_line.column = i; 967 968 if p -> sa (i) ^= " 969 " 970 then return; 971 lexeme_env.token.span = lexeme_env.token.span + 1; 972 973 more = "1"b; 974 975 do while (more); 976 977 call get_line; 978 979 if lexeme_env.current_line.length = 0 980 then return; /* card too small */ 981 if lexeme_env.current_line.length < 8 982 then lexeme_env.token.span = lexeme_env.token.span + lexeme_env.current_line.length; 983 984 else /* comment line */ 985 if lexeme_env.current_line.loc -> sa (7) = "*" 986 then lexeme_env.token.span = lexeme_env.token.span + lexeme_env.current_line.length; 987 988 else /* continuation line */ 989 if lexeme_env.current_line.loc -> sa (7) = "-" 990 then if lexeme_env.current_line.length < 13 991 then lexeme_env.token.span = lexeme_env.token.span + lexeme_env.current_line.length; 992 else do; 993 lexeme_env.token.span = lexeme_env.token.span + 11; 994 lexeme_env.current_line.column = 12; 995 more = "0"b; 996 end; 997 else do; 998 lexeme_env.token.span = lexeme_env.token.span + 7; 999 lexeme_env.current_line.column = 8; 1000 more = "0"b; 1001 end; 1002 end; 1003 end; 1004 end; 1005 1006 look: 1007 proc; 1008 1009 /* res = 1 space new_line )( EOF .,;-separator == 1010* res = 2 .,; 1011* res = 3 other 1012* */ 1013 1014 res = 1; 1015 ch = ""; 1016 1017 if lexeme_env.current_line.length = 0 1018 then return; 1019 1020 ch = lexeme_env.current_line.loc -> sa (lexeme_env.current_line.column); 1021 1022 if ch = " " | ch = " 1023 " 1024 then return; 1025 1026 if ch = "." | ch = "," | ch = ";" 1027 then if lexeme_env.current_line.column = lexeme_env.current_line.size 1028 then do; 1029 call next_cont; 1030 1031 if cont 1032 then do; 1033 res = 2; 1034 return; 1035 end; 1036 else do; 1037 res = 1; 1038 return; 1039 end; 1040 end; 1041 1042 else do; 1043 ch2 = substr (lexeme_env.current_line.loc -> ss, lexeme_env.current_line.column + 1, 2); 1044 1045 if substr (ch2, 1, 1) = " " 1046 then do; 1047 res = 1; 1048 return; 1049 end; 1050 else do; 1051 res = 2; 1052 if ch2 = "==" 1053 then res = 1; 1054 return; 1055 end; 1056 end; 1057 else if ch = "(" | ch = ")" 1058 then do; 1059 res = 1; 1060 return; 1061 end; 1062 else do; 1063 res = 3; 1064 call p_test; 1065 end; 1066 end; 1067 1068 p_test: 1069 proc; 1070 1071 if ch = "=" & lexeme_env.current_line.column + 1 < lexeme_env.current_line.length 1072 then if lexeme_env.current_line.loc -> sa (lexeme_env.current_line.column + 1) = "=" 1073 then res = 1; 1074 end; 1075 1076 merge: 1077 proc; 1078 1079 call next_cont; 1080 1081 if ^cont 1082 then return; 1083 1084 lexeme_env.token.span = 1085 lexeme_env.token.span + lexeme_env.current_line.length - lexeme_env.current_line.column + 1; 1086 1087 do while (cont); 1088 1089 call get_line; 1090 1091 if lexeme_env.current_line.size ^= 7 1092 then do; 1093 i = 12; 1094 1095 do while (lexeme_env.current_line.loc -> sa (i) = " "); 1096 1097 i = i + 1; 1098 1099 end; 1100 1101 lexeme_env.token.span = lexeme_env.token.span + i - 1; 1102 1103 lexeme_env.current_line.column = i; 1104 1105 return; 1106 end; 1107 1108 call next_cont; 1109 end; 1110 end; 1111 1112 next_cont: 1113 proc; 1114 1115 cont = "0"b; 1116 1117 if lexeme_env.next_line.length = 0 1118 then return; 1119 1120 if lexeme_env.next_line.size < 12 1121 then return; 1122 1123 if lexeme_env.next_line.loc -> sa (7) ^= "-" 1124 then return; 1125 1126 cont = "1"b; 1127 end; 1128 1129 move_char: 1130 proc; 1131 1132 scan_mode = "0"b; 1133 call m_c; 1134 1135 end; 1136 1137 move_lit_char: 1138 proc; 1139 1140 scan_mode = "1"b; 1141 call m_c; 1142 1143 end; 1144 1145 m_c: 1146 proc; 1147 1148 if lexeme_env.token.string_size = lexeme_env.token.string_cap 1149 then call alloc_lexeme; 1150 1151 lexeme_env.token.string_size = lexeme_env.token.string_size + 1; 1152 1153 lexeme_env.token.string_ptr -> sa (lexeme_env.token.string_size) = 1154 lexeme_env.current_line.loc -> sa (lexeme_env.current_line.column); 1155 1156 lexeme_env.current_line.column = lexeme_env.current_line.column + 1; 1157 lexeme_env.token.span = lexeme_env.token.span + 1; 1158 1159 if scan_mode | lexeme_env.current_line.column <= lexeme_env.current_line.size 1160 then return; 1161 1162 call merge; 1163 1164 end; 1165 1166 1167 get_line: 1168 proc; 1169 1170 1171 if lexeme_env.current_line.loc = null () 1172 then do; 1173 call fill_next_line; 1174 1175 lexeme_env.current_line = lexeme_env.next_line; 1176 lexeme_env.source_table.line = lexeme_env.source_table.line + 1; 1177 1178 if lexeme_env.current_line.size ^= 0 1179 then call fill_next_line; 1180 1181 return; 1182 1183 end; 1184 1185 else if lexeme_env.current_line.length = 0 1186 then return; 1187 1188 lexeme_env.current_line = lexeme_env.next_line; 1189 lexeme_env.source_table.line = lexeme_env.source_table.line + 1; 1190 1191 if lexeme_env.current_line.length = 0 1192 then return; 1193 1194 call fill_next_line; 1195 1196 end; 1197 1198 fill_next_line: 1199 proc; 1200 1201 declare (sl, sz) fixed bin; 1202 declare ch char (1), 1203 p ptr; 1204 1205 if lexeme_env.source_table.offset > lexeme_env.source_table.size 1206 then do; 1207 lexeme_env.next_line.length = 0; 1208 lexeme_env.next_line.loc = addr (lexeme_env.source_table.loc -> sa (lexeme_env.source_table.size)); 1209 1210 end; 1211 else do; 1212 p, lexeme_env.next_line.loc = 1213 addr (lexeme_env.source_table.loc -> sa (lexeme_env.source_table.offset)); 1214 1215 sl = lexeme_env.source_table.size - lexeme_env.source_table.offset + 1; 1216 1217 sz = index (substr (lexeme_env.next_line.loc -> ss, 1, sl), " 1218 "); 1219 1220 lexeme_env.next_line.offset = lexeme_env.source_table.offset; 1221 lexeme_env.next_line.length = sz; 1222 lexeme_env.next_line.column = 1; 1223 lexeme_env.source_table.offset = lexeme_env.source_table.offset + sz; 1224 1225 sz = sz - 1; 1226 1227 if sz ^= 0 1228 then do; 1229 ch = p -> sa (sz); 1230 1231 do while (ch = " "); 1232 1233 sz = sz - 1; 1234 1235 if sz = 0 1236 then ch = "~"; 1237 else ch = p -> sa (sz); 1238 1239 end; 1240 end; 1241 1242 lexeme_env.next_line.size = sz; 1243 end; 1244 1245 end; 1246 1247 /* 1248* 1249* Find a copy or replace statement not contained within a comment 1250* entry in the IDENTIFICATION DIVISION 1251* 1252* 1: XT: eof, copy, replace 1253* 2: ed, dd, pd 1254* 3: id 1255* 1: otherwise 1256* 1257* 2: find COPY/REPLACE 1258* 1259* 3: XT: eof 1260* 2: ed, dd, pd 1261* 4: pn. 1262* 3: otherwise 1263* 1264* 4: XT: eof, copy, replace 1265* 2: ed, dd, pd 1266* 5: otherwise 1267* 1268* 5: XT: eof 1269* 2: ed, dd, pd 1270* 4: pn. 1271* 5: otherwise 1272* 1273**/ 1274 1275 /*[5.3-1]*/ 1276 dcl tf bit (1), 1277 found bit (1); /*[5.3-1]*/ 1278 dcl state fixed bin static internal; /*[5.3-1]*/ 1279 dcl swexit label; 1280 1281 /*[5.3-1]*/ 1282 dcl ident char (14) varying init ("identification"); 1283 /*[5.3-1]*/ 1284 dcl div char (8) varying init ("division"); 1285 /*[5.3-1]*/ 1286 dcl env char (11) varying init ("environment"); 1287 /*[5.3-1]*/ 1288 dcl dat char (4) varying init ("data"); 1289 /*[5.3-1]*/ 1290 dcl proc char (9) varying init ("procedure"); 1291 /*[5.3-1]*/ 1292 dcl cpy char (4) varying init ("copy"); 1293 /*[5.3-1]*/ 1294 dcl rpl char (7) varying init ("replace"); 1295 1296 seek_word: 1297 proc; /* find COPY or REPLACE */ 1298 1299 /*[5.3-1]*/ 1300 swexit = swx1; 1301 1302 /*[5.3-1]*/ 1303 do while ("1"b); 1304 1305 /*[5.3-1]*/ 1306 go to sw (state); 1307 1308 sw (1): /* initial state */ 1309 /*[5.3-1]*/ 1310 call sw1; /*[5.3-1]*/ 1311 go to swx; 1312 1313 sw (2): /* ID, DD, PD found */ 1314 /*[5.3-1]*/ 1315 call SW; /*[5.3-1]*/ 1316 return; 1317 1318 sw (3): /* ID found */ 1319 /*[5.3-1]*/ 1320 call sw3; /*[5.3-1]*/ 1321 go to swx; 1322 1323 sw (4): /* proc-name found */ 1324 /*[5.3-1]*/ 1325 call sw4; /*[5.3-1]*/ 1326 go to swx; 1327 1328 sw (5): /* COPY, REPLACE found */ 1329 /*[5.3-1]*/ 1330 call sw5; /*[5.3-1]*/ 1331 go to swx; 1332 1333 swx: /*[5.3-1]*/ 1334 end; 1335 1336 swx1: 1337 end; 1338 1339 sw1: 1340 proc; /* initial state */ 1341 1342 /*[5.3-1]*/ 1343 do while ("1"b); 1344 1345 /*[5.3-1]*/ 1346 call GT; /* get a token */ 1347 1348 /*[5.3-1]*/ 1349 call test_hdr ("0"b, 3); /* test for ID */ 1350 /*[5.3-1]*/ 1351 if found 1352 then return; 1353 1354 /*[5.3-1]*/ 1355 call test_hdr ("1"b, 2); /* test for ED, DD, PD */ 1356 /*[5.3-1]*/ 1357 if found 1358 then return; 1359 1360 /*[5.3-1]*/ 1361 call test_word (addr (key_word)); /* COPY, REPLACE */ 1362 /*[5.3-1]*/ 1363 if found 1364 then go to swexit; /*[5.3-1]*/ 1365 end; 1366 end; 1367 1368 sw3: 1369 proc; /* after ID */ 1370 1371 /*[5.3-1]*/ 1372 do while ("1"b); 1373 1374 /*[5.3-1]*/ 1375 call GT; /* get a token */ 1376 1377 /*[5.3-1]*/ 1378 call test_hdr ("1"b, 2); /* test for ED, DD, PD */ 1379 /*[5.3-1]*/ 1380 if found 1381 then return; /* get a token */ 1382 1383 /*[5.3-1]*/ 1384 call test_pn (4); /* test for proc-name. */ 1385 /*[5.3-1]*/ 1386 if found 1387 then return; 1388 1389 /*[5.3-1]*/ 1390 call test_word (addr (key_word)); /* COPY, REPLACE */ 1391 /*[5.3-1]*/ 1392 if found 1393 then go to swexit; 1394 1395 /*[5.3-1]*/ 1396 end; 1397 end; 1398 1399 sw4: 1400 proc; /* after proc-name. */ 1401 1402 /*[5.3-1]*/ 1403 call GT1; /* get a token */ 1404 1405 /*[5.3-1]*/ 1406 call test_hdr ("1"b, 2); /* test for ED, DD, PD */ 1407 /*[5.3-1]*/ 1408 if found 1409 then return; 1410 1411 /*[5.3-1]*/ 1412 call test_word (addr (key_word)); /* COPY, REPLACE */ 1413 /*[5.3-1]*/ 1414 if found 1415 then go to swexit; 1416 1417 /*[5.3-1]*/ 1418 tf = "1"b; /*[5.3-1]*/ 1419 state = 5; 1420 end; 1421 1422 sw5: 1423 proc; /* after proc-name. */ 1424 1425 /*[5.3-1]*/ 1426 do while ("1"b); 1427 1428 /*[5.3-1]*/ 1429 call GT; /* get a token */ 1430 1431 /*[5.3-1]*/ 1432 call test_hdr ("1"b, 2); /* test for ED, DD, PD */ 1433 /*[5.3-1]*/ 1434 if found 1435 then return; 1436 1437 /*[5.3-1]*/ 1438 call test_pn (4); /* test for proc-name. */ 1439 /*[5.3-1]*/ 1440 if found 1441 then return; /*[5.3-1]*/ 1442 end; 1443 1444 end; 1445 1446 test_hdr: 1447 proc (md, st); /* test for division header */ 1448 1449 /*[5.3-1]*/ 1450 dcl md bit (1), 1451 st fixed bin; 1452 1453 /*[5.3-1]*/ 1454 if md /*[5.3-1]*/ 1455 then call tedp; /* ED, DD, PD */ 1456 /*[5.3-1]*/ 1457 else call test_word (addr (ident)); /* ID */ 1458 1459 /*[5.3-1]*/ 1460 if ^found 1461 then return; 1462 1463 /*[5.3-1]*/ 1464 call GT1; /* get token */ 1465 1466 /*[5.3-1]*/ 1467 call test_word (addr (div)); /* DIVISION */ 1468 /*[5.3-1]*/ 1469 if ^found 1470 then go to test_id_xf; 1471 1472 /*[5.3-1]*/ 1473 call gt; /* get token */ 1474 1475 /*[5.3-1]*/ 1476 call per_test; /* . */ 1477 /*[5.3-1]*/ 1478 if ^found 1479 then go to test_id_xf; 1480 1481 /*[5.3-1]*/ 1482 state = st; /*[5.3-1]*/ 1483 return; /* XT */ 1484 1485 test_id_xf: /* XF */ 1486 /*[5.3-1]*/ 1487 tf = "1"b; 1488 1489 1490 end; 1491 1492 tedp: 1493 proc; /* test for ED, DD, PD */ 1494 1495 /*[5.3-1]*/ 1496 call test_word (addr (env)); /* ENVIRONMENT */ 1497 /*[5.3-1]*/ 1498 if found 1499 then return; 1500 1501 /*[5.3-1]*/ 1502 call test_word (addr (dat)); /* DATA */ 1503 /*[5.3-1]*/ 1504 if found 1505 then return; 1506 1507 /*[5.3-1]*/ 1508 call test_word (addr (proc)); /* PROCEDURE */ 1509 1510 end; 1511 1512 per_test: 1513 proc; /* test for period */ 1514 1515 /*[5.3-1]*/ 1516 if lexeme_env.token.type = 4 /*[5.3-1]*/ 1517 then if lexeme_env.token.string = "." /*[5.3-1]*/ 1518 then found = "1"b; /*[5.3-1]*/ 1519 else found = "0"b; 1520 1521 end; 1522 1523 test_word: 1524 proc (p); /* test for specified string */ 1525 1526 /*[5.3-1]*/ 1527 dcl p ptr; /*[5.3-1]*/ 1528 dcl word char (32) varying based (p); 1529 1530 /*[5.3-1]*/ 1531 if lexeme_env.token.type = 3 & lexeme_env.token.string = word 1532 then found = "1"b; 1533 else found = "0"b; 1534 1535 end; 1536 1537 test_pn: 1538 proc (st); /* test for proc-name. */ 1539 1540 /*[5.3-1]*/ 1541 dcl st fixed bin; 1542 1543 /*[5.3-1]*/ 1544 call gt; /* get a token */ 1545 1546 /*[5.3-1]*/ 1547 call per_test; /* . */ 1548 /*[5.3-1]*/ 1549 if ^found 1550 then go to test_pn_xf; 1551 1552 /*[5.3-1]*/ 1553 found = "1"b; /*[5.3-1]*/ 1554 state = st; /*[5.3-1]*/ 1555 return; /* XT */ 1556 1557 test_pn_xf: /* XF */ 1558 /*[5.3-1]*/ 1559 tf = "1"b; 1560 1561 1562 end; 1563 1564 gt: 1565 proc; /* get a token */ 1566 1567 /*[5.3-1]*/ 1568 if tf /* token already read */ 1569 /*[5.3-1]*/ 1570 then do; 1571 tf = "0"b; /*[5.3-1]*/ 1572 return; /*[5.3-1]*/ 1573 end; 1574 1575 /*[5.3-1]*/ 1576 call get_token; /* read a token */ 1577 1578 /*[5.3-1]*/ 1579 if lexeme_env.error ^= 0 1580 then go to swexit; /* eof */ 1581 1582 end; 1583 1584 GT: 1585 proc; /* find word in margin A */ 1586 1587 /*[5.3-1]*/ 1588 call gt; /* get a token */ 1589 1590 /*[5.3-1]*/ 1591 do while (lexeme_env.token.column > 11 | lexeme_env.token.type ^= 3); 1592 1593 /*[5.3-1]*/ 1594 call gt; /* get a token */ 1595 1596 /*[5.3-1]*/ 1597 end; 1598 1599 end; 1600 1601 GT1: 1602 proc; /* find next real token */ 1603 1604 /*[5.3-1]*/ 1605 call gt; /* get a token */ 1606 1607 /*[5.3-1]*/ 1608 do while (lexeme_env.token.type = 1); 1609 1610 /*[5.3-1]*/ 1611 call gt; /* get a token */ 1612 1613 /*[5.3-1]*/ 1614 end; 1615 1616 end; 1617 1618 SW: 1619 proc; 1620 1621 call get_token; 1622 1623 do while (lexeme_env.error = 0 1624 & ((lexeme_env.token.type ^= 3 & lexeme_env.token.type ^= 4) 1625 | ((lexeme_env.token.type = 3 | lexeme_env.token.type = 4) 1626 & substr (lexeme_env.token.string_ptr -> ss, 1, lexeme_env.token.string_size) ^= key_word))); 1627 1628 call get_token; 1629 end; 1630 1631 end; 1632 1633 swm: 1634 proc; 1635 1636 1637 declare p ptr; 1638 1639 swm_2: 1640 if lexeme_env.current_line.length = 0 1641 then return; 1642 1643 old, new = lexeme_env.current_line.column; 1644 p = lexeme_env.current_line.loc; 1645 tok_size = lexeme_env.current_line.size; 1646 1647 swm_1: 1648 if new <= tok_size 1649 then if mask & mem_tab (fixed (unspec (p -> sa (new)), 35)) 1650 then do; 1651 new = new + 1; 1652 go to swm_1; 1653 end; 1654 1655 call form_str; 1656 1657 if new_line 1658 then do; 1659 call merge; 1660 1661 if cont 1662 then do; 1663 cont = "0"b; 1664 go to swm_2; 1665 end; 1666 end; 1667 1668 end; 1669 1670 swnm: 1671 proc; 1672 1673 1674 declare p ptr; 1675 1676 if lexeme_env.current_line.length = 0 1677 then return; 1678 1679 old, new = lexeme_env.current_line.column; 1680 p = lexeme_env.current_line.loc; 1681 tok_size = lexeme_env.current_line.size; 1682 1683 swnm_1: 1684 if new <= tok_size 1685 then if mask & ^mem_tab (fixed (unspec (p -> sa (new)), 35)) 1686 then do; 1687 new = new + 1; 1688 go to swnm_1; 1689 end; 1690 1691 call form_str; 1692 1693 end swnm; 1694 1695 form_str: 1696 proc; 1697 1698 size = new - old; 1699 1700 if new > tok_size 1701 then new_line = "1"b; 1702 else new_line = "0"b; 1703 1704 if size = 0 1705 then return; 1706 1707 tok_size = size + lexeme_env.token.string_size; 1708 1709 if tok_size > lexeme_env.token.string_cap 1710 then call alloc_lexeme; 1711 1712 substr (lexeme_env.token.string_ptr -> ss, lexeme_env.token.string_size + 1, size) = 1713 substr (lexeme_env.current_line.loc -> ss, old); 1714 1715 lexeme_env.token.string_size = lexeme_env.token.string_size + size; 1716 lexeme_env.token.span = lexeme_env.token.span + size; 1717 lexeme_env.current_line.column = new; 1718 1719 end; 1720 1721 alloc_lexeme: 1722 proc; 1723 1724 if lexeme_env.alloc.parity = 0 1725 then do; 1726 lexeme_env.alloc.parity = 1; 1727 lexeme_env.alloc.cap2 = 2 * lexeme_env.alloc.cap1; 1728 1729 allocate alloc_2 in (expand_cobol_source_area); 1730 1731 if lexeme_env.token.string_size ^= 0 1732 then alloc_2 = substr (alloc_1, 1, lexeme_env.token.string_size); 1733 1734 free alloc_1; 1735 1736 lexeme_env.token.string_cap = lexeme_env.alloc.cap2; 1737 lexeme_env.token.string_ptr = lexeme_env.alloc.ptr2; 1738 end; 1739 1740 else do; 1741 lexeme_env.alloc.parity = 0; 1742 lexeme_env.alloc.cap1 = 2 * lexeme_env.alloc.cap2; 1743 1744 allocate alloc_1 in (expand_cobol_source_area); 1745 1746 if lexeme_env.token.string_size ^= 0 1747 then alloc_1 = substr (alloc_2, 1, lexeme_env.token.string_size); 1748 1749 free alloc_2; 1750 1751 lexeme_env.token.string_cap = lexeme_env.alloc.cap1; 1752 lexeme_env.token.string_ptr = lexeme_env.alloc.ptr1; 1753 end; 1754 end; 1755 1756 1757 /* 1758* Membership table for scans and character look-ups 1759* column 1: alphanumeric characters [0...9 a...z alloc...Z -] 1760* column 2: digits [0...9] 1761* column 3: picture characters [all printable characters except " ;] 1762* column 4: binary characters [0 1] 1763* column 5: delimiters [nl space " ( ) , . ;] 1764* column 6: delimiters [. ; ,] 1765* column 7: delimiters [nl "] 1766* column 8: delimiters [nl sp . ; ,] 1767**/ 1768 1769 dcl m_t (0:127) bit (8) 1770 init ("00000000"b /* (NUL) 000 0 */, 1771 "00000000"b /* (SOH) 001 1 */, 1772 "00000000"b /* (STX) 002 2 */, 1773 "00000000"b /* (ETX) 003 3 */, 1774 "00000000"b /* (EOT) 004 4 */, 1775 "00000000"b /* (ENQ) 005 5 */, 1776 "00000000"b /* (ACK) 006 6 */, 1777 "00000000"b /* BEL 007 7 */, 1778 "00000000"b /* BS 010 8 */, 1779 "00000000"b /* HT 011 9 */, 1780 "00001011"b /* NL(LF) 012 10 */, 1781 "00000000"b /* VT 013 11 */, 1782 "00000000"b /* NP(FF) 014 12 */, 1783 "00000000"b /* (CR) 015 13 */, 1784 "00000000"b /* RRS(S0) 016 14 */, 1785 "00000000"b /* BRS(S1) 017 15 */, 1786 "00000000"b /* (DLE) 020 16 */, 1787 "00000000"b /* (DC1) 021 17 */, 1788 "00000000"b /* HLF(DC2) 022 18 */, 1789 "00000000"b /* (DC3) 023 19 */, 1790 "00000000"b /* HLR(DC4) 024 20 */, 1791 "00000000"b /* (NAK) 025 21 */, 1792 "00000000"b /* (SYN) 026 22 */, 1793 "00000000"b /* (ETB) 027 23 */, 1794 "00000000"b /* (CAN) 030 24 */, 1795 "00000000"b /* (EM) 031 25 */, 1796 "00000000"b /* (SUB) 032 26 */, 1797 "00000000"b /* (ESC) 033 27 */, 1798 "00000000"b /* (FS) 034 28 */, 1799 "00000000"b /* (GS) 035 29 */, 1800 "00000000"b /* (RS) 036 30 */, 1801 "00000000"b /* (US) 037 31 */, 1802 "00001001"b /* Space 040 32 */, 1803 "00100000"b /* ! 041 33 */, 1804 "00001010"b /* " 042 34 */, 1805 "00100000"b /* # 043 35 */, 1806 "00100000"b /* $ 044 36 */, 1807 "00100000"b /* % 045 37 */, 1808 "00100000"b /* & 046 38 */, 1809 "00100000"b /* ' 047 39 */, 1810 "00101001"b /* ( 050 40 */, 1811 "00101001"b /* ) 051 41 */, 1812 "00100000"b /* * 052 42 */, 1813 "00100000"b /* + 053 43 */, 1814 "00101101"b /* , 054 44 */, 1815 "10100000"b /* - 055 45 */, 1816 "00101101"b /* . 056 46 */, 1817 "00100000"b /* / 057 47 */, 1818 "11110000"b /* 0 060 48 */, 1819 "11110000"b /* 1 061 49 */, 1820 "11100000"b /* 2 062 50 */, 1821 "11100000"b /* 3 063 51 */, 1822 "11100000"b /* 4 064 52 */, 1823 "11100000"b /* 5 065 53 */, 1824 "11100000"b /* 6 066 54 */, 1825 "11100000"b /* 7 067 55 */, 1826 "11100000"b /* 8 070 56 */, 1827 "11100000"b /* 9 071 57 */, 1828 "00100000"b /* : 072 58 */, 1829 "00001101"b /* ; 073 59 */, 1830 "00100000"b /* < 074 60 */, 1831 "00100000"b /* = 075 61 */, 1832 "00100000"b /* > 076 62 */, 1833 "00100000"b /* ? 077 63 */, 1834 "00100000"b /* @ 100 64 */, 1835 "10100000"b /* A 101 65 */, 1836 "10100000"b /* B 102 66 */, 1837 "10100000"b /* C 103 67 */, 1838 "10100000"b /* D 104 68 */, 1839 "10100000"b /* E 105 69 */, 1840 "10100000"b /* F 106 70 */, 1841 "10100000"b /* G 107 71 */, 1842 "10100000"b /* H 110 72 */, 1843 "10100000"b /* I 111 73 */, 1844 "10100000"b /* J 112 74 */, 1845 "10100000"b /* K 113 75 */, 1846 "10100000"b /* L 114 76 */, 1847 "10100000"b /* M 115 77 */, 1848 "10100000"b /* N 116 78 */, 1849 "10100000"b /* O 117 79 */, 1850 "10100000"b /* P 120 80 */, 1851 "10100000"b /* Q 121 81 */, 1852 "10100000"b /* R 122 82 */, 1853 "10100000"b /* S 123 83 */, 1854 "10100000"b /* T 124 84 */, 1855 "10100000"b /* U 125 85 */, 1856 "10100000"b /* V 126 86 */, 1857 "10100000"b /* W 127 87 */, 1858 "10100000"b /* X 130 88 */, 1859 "10100000"b /* Y 131 89 */, 1860 "10100000"b /* Z 132 90 */, 1861 "00100000"b /* [ 133 91 */, 1862 "00100000"b /* \ 134 92 */, 1863 "00100000"b /* ] 135 93 */, 1864 "00100000"b /* ^ 136 94 */, 1865 "00100000"b /* _ 137 95 */, 1866 "00100000"b /* ` 140 96 */, 1867 "10100000"b /* a 141 97 */, 1868 "10100000"b /* b 142 98 */, 1869 "10100000"b /* c 143 99 */, 1870 "10100000"b /* d 144 100 */, 1871 "10100000"b /* e 145 101 */, 1872 "10100000"b /* f 146 102 */, 1873 "10100000"b /* g 147 103 */, 1874 "10100000"b /* h 150 104 */, 1875 "10100000"b /* i 151 105 */, 1876 "10100000"b /* j 152 106 */, 1877 "10100000"b /* k 153 107 */, 1878 "10100000"b /* l 154 108 */, 1879 "10100000"b /* m 155 109 */, 1880 "10100000"b /* n 156 110 */, 1881 "10100000"b /* o 157 111 */, 1882 "10100000"b /* p 160 112 */, 1883 "10100000"b /* q 161 113 */, 1884 "10100000"b /* r 162 114 */, 1885 "10100000"b /* s 163 115 */, 1886 "10100000"b /* t 164 116 */, 1887 "10100000"b /* u 165 117 */, 1888 "10100000"b /* v 166 118 */, 1889 "10100000"b /* w 167 119 */, 1890 "10100000"b /* x 170 120 */, 1891 "10100000"b /* y 171 121 */, 1892 "10100000"b /* z 172 122 */, 1893 "00100000"b /* { 173 123 */, 1894 "00100000"b /* | 174 124 */, 1895 "00100000"b /* } 175 125 */, 1896 "00100000"b /* ~ 176 126 */, 1897 "00000000"b /* DEL 177 127 */); 1898 1899 /* character classes defined by the x table */ 1900 1901 /* 1 A...Za...z 1902* 2 0...9 1903* 3 " 1904* 4 1905* 5 ,; 1906* 6 + 1907* 7 * 1908* 8 % 1909* 9 / 1910* 10 illegal 1911* 11 ( 1912* 12 nl , SP 1913* 13 ) 1914* 14 . 1915* 15 = 1916* 16 < 1917* 17 > 1918* 18 - 1919**/ 1920 1921 dcl x_i (0:127) fixed bin (8) 1922 init (10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 12, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 1923 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 12, 10, 3, 10, 10, 8, 10, 10, 11, 13, 7, 6, 5, 1924 18, 14, 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 5, 16, 15, 17, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1925 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 10, 10, 10, 10, 10, 1, 1, 1, 1, 1, 1926 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 10, 10, 10, 10); 1927 1928 dcl lower_case_alphabet char (128) static options (constant) init (" 1929  !""#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"); 1930 1 1 /* BEGIN INCLUDE FILE ... cobol_lexeme_env.incl.pl1 */ 1 2 1 3 /* entry declarations for cobol_lexeme */ 1 4 1 5 declare cobol_lexeme$open entry (ptr); 1 6 declare cobol_lexeme$close entry(ptr); 1 7 declare cobol_lexeme$set entry(ptr,char(*),ptr); 1 8 declare cobol_lexeme$find_copy entry(ptr); 1 9 declare cobol_lexeme$find_replace entry(ptr); 1 10 declare cobol_lexeme$find_pseudo_text entry(ptr); 1 11 declare cobol_lexeme$text_word entry(ptr); 1 12 declare cobol_lexeme$token entry(ptr); 1 13 declare cobol_lexeme$cobol_lexeme entry(ptr); 1 14 1 15 dcl 1 16 1 17 1 lexeme_env based(lexeme_ptr), 1 18 2 token, 1 19 3 line fixed bin, 1 20 3 column fixed bin, 1 21 3 type fixed bin, 1 22 3 offset fixed bin(35), 1 23 3 span fixed bin, 1 24 3 string_size fixed bin(35), 1 25 3 string_cap fixed bin, 1 26 3 string_ptr ptr, 1 27 3 string char(32) varying, 1 28 3 col_7 char(1), 1 29 2 source_table, 1 30 3 line fixed bin, 1 31 3 loc ptr, 1 32 3 offset fixed bin(35), 1 33 3 size fixed bin(24), 1 34 2 current_line, 1 35 3 loc ptr, 1 36 3 column fixed bin, 1 37 3 size fixed bin, 1 38 3 length fixed bin, 1 39 3 offset fixed bin(35), 1 40 2 next_line, 1 41 3 loc ptr, 1 42 3 column fixed bin, 1 43 3 size fixed bin, 1 44 3 length fixed bin, 1 45 3 offset fixed bin(35), 1 46 2 alloc, 1 47 3 parity fixed bin, 1 48 3 ptr1 ptr, 1 49 3 ptr2 ptr, 1 50 3 cap1 fixed bin, 1 51 3 cap2 fixed bin, 1 52 2 error fixed bin, 1 53 2 pseudo_text fixed bin, 1 54 2 indicators, 1 55 3 copy_replace bit(1), 1 56 3 lc bit(1), 1 57 3 filler bit(7), 1 58 2 environment, 1 59 3 ecs_ptr ptr, 1 60 3 mem_tab_ptr ptr, 1 61 3 x_ptr ptr; 1 62 1 63 /* 1 64* token 1 65* 1 66* line line on which lexeme begins 1 67* column column in which lexeme begins 1 68* type lexeme type 1 69* 1: space token 1 70* 2: literal 1 71* 3: word 1 72* 4: separator 1 73* 5: comment entry 1 74* 6: pseudo-text 1 75* offset postiion of lexeme in source file 1 76* span size of lexeme in source file 1 77* string_size size (characters) of lexeme 1 78* only if type = 2, 3, 4 1 79* string_cap maximum size for lexeme string 1 80* string_ptr pointer to lexeme string 1 81* string the string of characters comprising the lexeme, 1 82* valid only string_size <= 32 & (type = 3 | type = 4) 1 83* col_7 contents of column 7 1 84* 1 85* source_table 1 86* 1 87* line current line number 1 88* loc pointer to source table 1 89* offset position of next line 1 90* size size of table 1 91* 1 92* current_line 1 93* next_line 1 94* 1 95* loc pointer to line 1 96* null() if no line 1 97* column current column number 1 98* size size of reduced line 1 99* terminal blanks and LF not counted 1 100* 1,...,7 if blank line 1 101* length actual size of line 1 102* normally ends in LF 1 103* 0 if EOF 1 104* offset offset of line in source file 1 105* 1 106* alloc 1 107* 1 108* parity 0 or 1 1 109* ptr1 location of table 1 1 110* ptr2 location of table 2 1 111* cap1 capacity of table 1 1 112* cap2 capacity of table 2 1 113* 1 114* error error status 1 115* 0 no error 1 116* 1 end of token stream 1 117* 2 set: data not in expected format 1 118* 1 119* pseudo_text status for pseudo_text parsing 1 120* 1 121* indicators 1 122* 1 123* copy_replace "1"b if copy/replace statement being parsed 1 124* lc "0"b if no conversion to lower case desired 1 125**/ 1 126 1 127 /* END INCLUDE FILE ... cobol_lexeme_env.incl.pl1 */ 1 128 1931 1932 1933 end; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 05/24/89 0836.9 cobol_lexeme.pl1 >spec>install>MR12.3-1048>cobol_lexeme.pl1 1931 1 03/27/82 0439.4 cobol_lexeme_env.incl.pl1 >ldd>include>cobol_lexeme_env.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. addr builtin function dcl 38 ref 273 1208 1212 1361 1361 1390 1390 1412 1412 1457 1457 1467 1467 1496 1496 1502 1502 1508 1508 alloc 46 based structure level 2 unaligned dcl 1-15 alloc_1 based char packed unaligned dcl 94 set ref 278 1731 1734 1744 1746* alloc_2 based char packed unaligned dcl 95 set ref 1729 1731* 1746 1749 b 000234 automatic structure level 1 unaligned dcl 70 set ref 330* 340 346* 371 375 bc 000100 automatic fixed bin(24,0) dcl 48 set ref 194* 216* 235 bit9 based bit(9) packed unaligned dcl 92 set ref 273* cap1 54 based fixed bin(17,0) level 3 dcl 1-15 set ref 275* 278 278 1727 1731 1734 1734 1742* 1744 1744 1746 1751 cap2 55 based fixed bin(17,0) level 3 dcl 1-15 set ref 1727* 1729 1729 1731 1736 1742 1746 1749 1749 ch 000716 automatic char(1) packed unaligned dcl 1202 in procedure "fill_next_line" set ref 1229* 1231 1235* 1237* ch 000102 automatic char(1) packed unaligned dcl 51 in procedure "cobol_lexeme" set ref 114* 116 116 122* 451* 453 453 473 541 550 550 595 654 687 713 835 858* 860 1015* 1020* 1022 1022 1026 1026 1026 1057 1057 1071 ch 000572 automatic char(1) packed unaligned dcl 228 in procedure "env_set" set ref 237* 240 245* ch2 000103 automatic char(2) packed unaligned dcl 51 set ref 1043* 1045 1052 code 000101 automatic fixed bin(35,0) dcl 48 set ref 194* 197 215* 216* 218 218* 233 251* col_7 23 based char(1) level 3 packed packed unaligned dcl 1-15 set ref 428* column 1 based fixed bin(17,0) level 3 in structure "lexeme_env" dcl 1-15 in procedure "cobol_lexeme" set ref 424* 1591 column 42 based fixed bin(17,0) level 3 in structure "lexeme_env" dcl 1-15 in procedure "cobol_lexeme" set ref 1222* column 34 based fixed bin(17,0) level 3 in structure "lexeme_env" dcl 1-15 in procedure "cobol_lexeme" set ref 424 425 431 437 439* 442 443* 451 509 509 571 622 777 785 790* 790 854 858 927* 955 964 966* 994* 999* 1020 1026 1043 1071 1071 1084 1103* 1153 1156* 1156 1159 1643 1679 1717* cont 000115 automatic bit(1) packed unaligned dcl 56 set ref 770 772* 895 937 1031 1081 1087 1115* 1126* 1661 1663* copy_replace 60 based bit(1) level 3 packed packed unaligned dcl 1-15 set ref 782 864 cpy 000312 automatic varying char(4) initial dcl 1292 set ref 1292* current_line 32 based structure level 2 unaligned dcl 1-15 set ref 1175* 1188* dat 000304 automatic varying char(4) initial dcl 1288 set ref 1288* 1502 1502 dec_pt_count 000122 automatic fixed bin(17,0) dcl 58 set ref 422* 537 546* 550 657* 838* dir_name 000151 automatic char(168) packed unaligned dcl 66 set ref 215* 216* div 000275 automatic varying char(8) initial dcl 1284 set ref 1284* 1467 1467 e_offset 000233 automatic fixed bin(35,0) dcl 68 set ref 355* 377 ecs_ptr 62 based pointer level 3 dcl 1-15 ref 132 142 278 1729 1744 entry_name 000223 automatic char(32) packed unaligned dcl 66 set ref 215* 216* env 000300 automatic varying char(11) initial dcl 1286 set ref 1286* 1496 1496 environment 62 based structure level 2 unaligned dcl 1-15 error 56 based fixed bin(17,0) level 2 dcl 1-15 set ref 116 197* 262* 316 334 352 361 389 413* 419* 1579 1623 error_table_$segknown 000022 external static fixed bin(35,0) dcl 87 ref 218 error_table_$zero_length_seg 000020 external static fixed bin(35,0) dcl 85 ref 197 expand_cobol_source_area based area(1024) dcl 101 ref 132 142 278 1729 1744 file_name 000132 automatic char(44) packed unaligned dcl 63 set ref 182* 185 191 find_include_file_$initiate_count 000024 constant entry external dcl 104 ref 194 fixed builtin function dcl 38 ref 473 550 654 687 835 1647 1683 found 000262 automatic bit(1) packed unaligned dcl 1276 set ref 1351 1357 1363 1380 1386 1392 1408 1414 1434 1440 1460 1469 1478 1498 1504 1516* 1519* 1531* 1533* 1549 1553* hcs_$fs_get_path_name 000012 constant entry external dcl 41 ref 215 hcs_$initiate_count 000014 constant entry external dcl 43 ref 216 hcs_$set_bc_seg 000016 constant entry external dcl 44 ref 251 i 000125 automatic fixed bin(17,0) dcl 61 set ref 134* 135 135* 138* 139* 144* 145 145* 148* 149* 183* 185 185 187* 187 191 191 235* 955* 958 960* 960 964 966 968 1093* 1095 1097* 1097 1101 1103 ident 000270 automatic varying char(14) initial dcl 1282 set ref 1282* 1457 1457 index builtin function dcl 38 ref 1217 indicators 60 based structure level 2 packed packed unaligned dcl 1-15 set ref 273 j 000126 automatic fixed bin(17,0) dcl 61 set ref 235* 237 244* 244 245 251 282 905 909* 911 913* 913 917 923 926 927 key_word 000104 automatic varying char(32) dcl 54 set ref 291* 301* 1361 1361 1390 1390 1412 1412 1623 lc 60(01) based bit(1) level 3 packed packed unaligned dcl 1-15 set ref 497 ldn 000260 automatic fixed bin(17,0) dcl 82 set ref 215* length 44 based fixed bin(17,0) level 3 in structure "lexeme_env" dcl 1-15 in procedure "cobol_lexeme" set ref 1117 1207* 1221* length 36 based fixed bin(17,0) level 3 in structure "lexeme_env" dcl 1-15 in procedure "cobol_lexeme" set ref 411 435 437 439 509 944 979 981 981 984 988 988 1017 1071 1084 1185 1191 1639 1676 lexeme_env based structure level 1 unaligned dcl 1-15 lexeme_ptr parameter pointer dcl 36 ref 33 114 116 116 116 116 122 129 132 132 135 139 142 142 145 149 159 162 163 172 176 179 194 197 204 208 236 262 269 270 271 272 273 275 276 278 278 278 278 280 281 281 282 288 297 309 312 316 319 321 323 327 329 330 334 337 337 340 345 346 352 355 357 361 366 366 371 375 377 378 384 389 389 401 411 413 419 423 423 424 424 425 425 425 426 426 428 428 428 431 433 435 437 437 437 439 439 442 442 443 451 451 456 473 481 492 492 492 497 497 497 497 497 502 502 502 502 509 509 509 509 523 550 554 562 571 571 581 581 607 607 622 622 643 654 658 673 681 687 690 699 735 757 777 779 782 782 785 785 788 788 789 789 790 790 803 813 824 835 839 851 854 854 858 858 864 867 869 873 908 926 926 927 944 944 944 955 956 964 964 964 966 971 971 979 981 981 981 981 984 984 984 984 988 988 988 988 988 993 993 994 998 998 999 1017 1020 1020 1026 1026 1043 1043 1071 1071 1071 1071 1084 1084 1084 1084 1091 1095 1101 1101 1103 1117 1120 1123 1148 1148 1151 1151 1153 1153 1153 1153 1156 1156 1157 1157 1159 1159 1171 1175 1175 1176 1176 1178 1185 1188 1188 1189 1189 1191 1205 1205 1207 1208 1208 1208 1212 1212 1212 1215 1215 1217 1220 1220 1221 1222 1223 1223 1242 1516 1516 1531 1531 1579 1591 1591 1608 1623 1623 1623 1623 1623 1623 1623 1639 1643 1644 1645 1647 1676 1679 1680 1681 1683 1707 1709 1712 1712 1712 1715 1715 1716 1716 1717 1724 1726 1727 1727 1729 1729 1729 1729 1731 1731 1731 1731 1731 1731 1734 1734 1734 1736 1736 1737 1737 1741 1742 1742 1744 1744 1744 1744 1746 1746 1746 1746 1746 1746 1749 1749 1749 1751 1751 1752 1752 line 24 based fixed bin(17,0) level 3 in structure "lexeme_env" dcl 1-15 in procedure "cobol_lexeme" set ref 270* 423 1176* 1176 1189* 1189 line based fixed bin(17,0) level 3 in structure "lexeme_env" dcl 1-15 in procedure "cobol_lexeme" set ref 423* loc 32 based pointer level 3 in structure "lexeme_env" dcl 1-15 in procedure "cobol_lexeme" set ref 271* 428 451 509 571 622 785 858 908 956 984 988 1020 1043 1071 1095 1153 1171 1644 1680 1712 loc 26 based pointer level 3 in structure "lexeme_env" dcl 1-15 in procedure "cobol_lexeme" set ref 176* 194* 204* 208* 236 1208 1212 loc 40 based pointer level 3 in structure "lexeme_env" dcl 1-15 in procedure "cobol_lexeme" set ref 272* 1123 1208* 1212* 1217 lower_case_alphabet 000100 constant char(128) initial packed unaligned dcl 1928 ref 497 m_t 000317 automatic bit(8) initial array packed unaligned dcl 1769 set ref 135 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* 1769* mask 000124 automatic bit(8) packed unaligned dcl 58 set ref 483* 526* 567* 761* 1647 1683 md parameter bit(1) packed unaligned dcl 1450 ref 1446 1454 mem_tab based bit(8) array packed unaligned dcl 98 set ref 132 135* 139* 162 550 654 687 835 1647 1683 mem_tab_ptr 64 based pointer level 3 dcl 1-15 set ref 132* 135 139 162 550 654 687 835 1647 1683 more 000117 automatic bit(1) packed unaligned dcl 56 set ref 973* 975 995* 1000* new 000146 automatic fixed bin(17,0) dcl 64 set ref 1643* 1647 1647 1651* 1651 1679* 1683 1683 1687* 1687 1698 1700 1717 new_line 000116 automatic bit(1) packed unaligned dcl 56 set ref 766 1657 1700* 1702* next_line 40 based structure level 2 unaligned dcl 1-15 set ref 1175 1188 null builtin function dcl 38 ref 271 272 1171 offset 3 based fixed bin(35,0) level 3 in structure "lexeme_env" dcl 1-15 in procedure "cobol_lexeme" set ref 355 425* offset 45 based fixed bin(35,0) level 3 in structure "lexeme_env" dcl 1-15 in procedure "cobol_lexeme" set ref 1220* offset 30 based fixed bin(35,0) level 3 in structure "lexeme_env" dcl 1-15 in procedure "cobol_lexeme" set ref 269* 1205 1212 1215 1220 1223* 1223 offset 3 000234 automatic fixed bin(35,0) level 2 in structure "b" dcl 70 in procedure "cobol_lexeme" set ref 377 offset 37 based fixed bin(35,0) level 3 in structure "lexeme_env" dcl 1-15 in procedure "cobol_lexeme" set ref 425 old 000145 automatic fixed bin(17,0) dcl 64 set ref 1643* 1679* 1698 1712 p parameter pointer dcl 213 in procedure "set_bc" set ref 211 215* 216* p parameter pointer dcl 1527 in procedure "test_word" ref 1523 1531 p 001054 automatic pointer dcl 1637 in procedure "swm" set ref 1644* 1647 p 000574 automatic pointer dcl 228 in procedure "env_set" set ref 236* 237 245 251* p 000720 automatic pointer dcl 1202 in procedure "fill_next_line" set ref 1212* 1229 1237 p 000130 automatic pointer dcl 61 in procedure "cobol_lexeme" set ref 908* 911 917 923 956* 958 968 p 001064 automatic pointer dcl 1674 in procedure "swnm" set ref 1680* 1683 parity 46 based fixed bin(17,0) level 3 dcl 1-15 set ref 276* 1724 1726* 1741* proc 000306 automatic varying char(9) initial dcl 1290 set ref 1290* 1508 1508 pseudo_text 57 based fixed bin(17,0) level 2 dcl 1-15 set ref 312* 378* 782 867 869* 873* ptr1 50 based pointer level 3 dcl 1-15 set ref 278* 281 1731 1734 1744* 1746 1752 ptr2 52 based pointer level 3 dcl 1-15 set ref 1729* 1731 1737 1746 1749 res 000121 automatic fixed bin(17,0) dcl 58 set ref 414* 447* 460* 462* 468 490 533 576 593 601 626 650 679 706 720 746 831 897* 919* 928* 939* 1014* 1033* 1037* 1047* 1051* 1052* 1059* 1063* 1071* rpl 000314 automatic varying char(7) initial dcl 1294 set ref 1294* s_ptr parameter pointer dcl 46 set ref 179 194* 204 sa based char(1) array packed unaligned dcl 91 set ref 114 122 237 245 428 451 492 571 622 858 911 917 923 958 968 984 988 1020 1071 1095 1123 1153* 1153 1208 1212 1229 1237 1647 1683 scan_mode 000120 automatic bit(1) packed unaligned dcl 56 set ref 1132* 1140* 1159 sign_count 000123 automatic fixed bin(17,0) dcl 58 set ref 422* 550 670* size 31 based fixed bin(24,0) level 3 in structure "lexeme_env" dcl 1-15 in procedure "cobol_lexeme" set ref 282* 1205 1208 1215 size 35 based fixed bin(17,0) level 3 in structure "lexeme_env" dcl 1-15 in procedure "cobol_lexeme" set ref 428 854 1026 1091 1159 1178 1645 1681 size 000147 automatic fixed bin(17,0) dcl 64 in procedure "cobol_lexeme" set ref 1698* 1704 1707 1712 1715 1716 size 43 based fixed bin(17,0) level 3 in structure "lexeme_env" dcl 1-15 in procedure "cobol_lexeme" set ref 1120 1242* sl 000714 automatic fixed bin(17,0) dcl 1201 set ref 1215* 1217 sname parameter char packed unaligned dcl 46 set ref 179 182 194* source_table 24 based structure level 2 unaligned dcl 1-15 span 4 based fixed bin(17,0) level 3 dcl 1-15 set ref 323* 377* 426* 437* 442* 581* 581 607* 607 788* 788 926* 926 944* 944 964* 964 971* 971 981* 981 984* 984 988* 988 993* 993 998* 998 1084* 1084 1101* 1101 1157* 1157 1716* 1716 ss based char(1000000) packed unaligned dcl 90 set ref 497* 497 502 509 785 1043 1217 1623 1712* 1712 st parameter fixed bin(17,0) dcl 1541 in procedure "test_pn" ref 1537 1554 st parameter fixed bin(17,0) dcl 1450 in procedure "test_hdr" ref 1446 1482 state 000010 internal static fixed bin(17,0) dcl 1278 set ref 153* 1306 1419* 1482* 1554* string 12 based varying char(32) level 3 dcl 1-15 set ref 321 337 366 502* 1516 1531 string_cap 6 based fixed bin(17,0) level 3 dcl 1-15 set ref 280* 1148 1709 1736* 1751* string_ptr 10 based pointer level 3 dcl 1-15 set ref 114 122 281* 492 497 497 502 1153 1623 1712 1737* 1752* string_size 5 based fixed bin(35,0) level 3 dcl 1-15 set ref 116 426* 492 497 497 502 502 779 789* 789 1148 1151* 1151 1153 1623 1707 1712 1715* 1715 1731 1731 1746 1746 substr builtin function dcl 38 set ref 185 191 497* 497 502 509 785 1043 1045 1217 1623 1712* 1712 1731 1746 swexit 000264 automatic label variable dcl 1279 set ref 1300* 1363 1392 1414 1579 sz 000715 automatic fixed bin(17,0) dcl 1201 set ref 1217* 1221 1223 1225* 1225 1227 1229 1233* 1233 1235 1237 1242 tf 000261 automatic bit(1) packed unaligned dcl 1276 set ref 154* 1418* 1485* 1557* 1568 1571* tok_size 000150 automatic fixed bin(17,0) dcl 64 set ref 1645* 1647 1681* 1683 1700 1707* 1709 token based structure level 2 unaligned dcl 1-15 set ref 330 340* 346 371* 375* translate builtin function dcl 38 ref 497 type 2 based fixed bin(17,0) level 3 dcl 1-15 set ref 116 116 319 327 329* 337 345* 357 366 389 433* 456* 481* 492* 523* 554* 562* 643* 658* 673* 681* 690* 699* 735* 757* 803* 813* 824* 839* 851* 1516 1531 1591 1608 1623 1623 1623 1623 unspec builtin function dcl 38 ref 473 550 654 687 835 1647 1683 word based varying char(32) dcl 1528 ref 1531 x based fixed bin(8,0) array dcl 99 set ref 142 145* 149* 163 473 x_i 000354 automatic fixed bin(8,0) initial array dcl 1921 set ref 145 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* 1921* x_ptr 66 based pointer level 3 dcl 1-15 set ref 142* 145 149 163 473 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ch_val automatic fixed bin(17,0) dcl 51 cobol_lexeme$close 000000 constant entry external dcl 1-6 cobol_lexeme$cobol_lexeme 000000 constant entry external dcl 1-13 cobol_lexeme$find_copy 000000 constant entry external dcl 1-8 cobol_lexeme$find_pseudo_text 000000 constant entry external dcl 1-10 cobol_lexeme$find_replace 000000 constant entry external dcl 1-9 cobol_lexeme$open 000000 constant entry external dcl 1-5 cobol_lexeme$set 000000 constant entry external dcl 1-7 cobol_lexeme$text_word 000000 constant entry external dcl 1-11 cobol_lexeme$token 000000 constant entry external dcl 1-12 e_span automatic fixed bin(35,0) dcl 68 env_ptr automatic pointer dcl 46 last_token_space automatic bit(1) packed unaligned dcl 83 lc automatic fixed bin(17,0) dcl 50 saved_offset automatic fixed bin(35,0) dcl 55 NAMES DECLARED BY EXPLICIT CONTEXT. GT 006046 constant entry internal dcl 1584 ref 1346 1375 1429 GT1 006064 constant entry internal dcl 1601 ref 1403 1464 SW 006077 constant entry internal dcl 1618 ref 1313 al1 000032 constant label array(3) dcl 578 ref 576 al2 000035 constant label array(3) dcl 595 ref 593 al21 000040 constant label array(3) dcl 603 ref 601 al3 000043 constant label array(3) dcl 628 ref 626 al_1 004153 constant label dcl 568 ref 584 638 al_2 004177 constant label dcl 590 ref 609 al_3 004220 constant label dcl 618 ref 632 alloc_lexeme 006341 constant entry internal dcl 1721 ref 1148 1709 ask 000054 constant label array(3) dcl 708 ref 706 close 002724 constant entry external dcl 159 cobol_lexeme 002511 constant entry external dcl 33 com_ent 004372 constant label dcl 761 ref 773 comm 004365 constant label dcl 757 ref 514 515 537 541 557 578 628 662 664 684 694 710 724 730 750 843 845 cont_lit 004552 constant entry internal dcl 888 ref 574 599 625 dlm 004357 constant label dcl 740 ref 884 dlm_1 004360 constant label dcl 743 ref 864 877 880 env_init 003576 constant entry internal dcl 266 ref 254 env_set 003513 constant entry internal dcl 226 ref 199 221 envinit 002747 constant entry external dcl 172 exp 000057 constant label array(3) dcl 722 ref 720 fill_next_line 005336 constant entry internal dcl 1198 ref 1173 1178 1194 find_copy 003136 constant entry external dcl 288 find_pseudo_text 003173 constant entry external dcl 309 find_replace 003154 constant entry external dcl 297 form_str 006260 constant entry internal dcl 1695 ref 1655 1691 fpt_1 003324 constant label dcl 371 ref 352 361 fpt_2 003333 constant label dcl 375 ref 366 get_line 005270 constant entry internal dcl 1167 ref 284 901 946 977 1089 get_token 003652 constant entry internal dcl 408 ref 112 120 314 332 350 359 387 391 404 1576 1621 1628 gt 006030 constant entry internal dcl 1564 ref 1473 1544 1588 1594 1605 1611 l 000002 constant label array(18) dcl 481 ref 473 look 004764 constant entry internal dcl 1006 ref 488 531 590 648 677 704 718 743 829 m_c 005231 constant entry internal dcl 1145 ref 1133 1141 merge 005114 constant entry internal dcl 1076 ref 768 1162 1659 move_char 005220 constant entry internal dcl 1129 ref 544 565 646 675 702 716 740 806 816 827 856 862 move_lit_char 005224 constant entry internal dcl 1137 ref 588 next_cont 005173 constant entry internal dcl 1112 ref 893 935 1029 1079 1108 nl1 000027 constant label array(3) dcl 535 ref 533 num_lit 004074 constant label dcl 526 ref 548 659 691 840 open 002567 constant entry external dcl 129 p_test 005070 constant entry internal dcl 1068 ref 1064 per 000065 constant label array(3) dcl 833 ref 831 per_test 005742 constant entry internal dcl 1512 ref 1476 1547 ptxt 000070 constant label array(3) dcl 869 ref 867 seek_word 005460 constant entry internal dcl 1296 ref 293 303 sep 000046 constant label array(3) dcl 652 ref 650 set 002773 constant entry external dcl 179 set_bc 003405 constant entry internal dcl 211 ref 176 208 sgn 000051 constant label array(3) dcl 681 ref 679 space 004647 constant entry internal dcl 951 ref 446 458 ss1 004033 constant label dcl 502 ref 603 613 615 652 683 708 722 748 808 818 833 871 st 000000 constant label array(2) dcl 470 ref 468 sw 000073 constant label array(5) dcl 1308 ref 1306 sw1 005502 constant entry internal dcl 1339 ref 1308 sw3 005541 constant entry internal dcl 1368 ref 1318 sw4 005575 constant entry internal dcl 1399 ref 1323 sw5 005626 constant entry internal dcl 1422 ref 1328 swm 006132 constant entry internal dcl 1633 ref 486 529 swm_1 006150 constant label dcl 1647 ref 1652 swm_2 006133 constant label dcl 1639 ref 1664 swnm 006210 constant entry internal dcl 1670 ref 568 618 764 swnm_1 006226 constant label dcl 1683 ref 1688 swx 005501 constant label dcl 1333 ref 1311 1321 1326 1331 swx1 005501 constant label dcl 1336 ref 1300 tedp 005716 constant entry internal dcl 1492 ref 1454 test_hdr 005653 constant entry internal dcl 1446 ref 1349 1355 1378 1406 1432 test_id_xf 005713 constant label dcl 1485 ref 1469 1478 test_pn 006010 constant entry internal dcl 1537 ref 1384 1438 test_pn_xf 006025 constant label dcl 1557 ref 1549 test_word 005763 constant entry internal dcl 1523 ref 1361 1390 1412 1457 1467 1496 1502 1508 text_word 003351 constant entry external dcl 384 token 003375 constant entry external dcl 401 w 000024 constant label array(3) dcl 492 ref 490 wd 000062 constant label array(3) dcl 748 ref 746 wd_1 004004 constant label dcl 492 ref 509 word 003776 constant label dcl 483 ref 555 NAME DECLARED BY CONTEXT OR IMPLICATION. divide builtin function ref 235 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 7172 7220 7002 7202 Length 7444 7002 26 207 170 2 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME cobol_lexeme 707 external procedure is an external procedure. set_bc internal procedure shares stack frame of external procedure cobol_lexeme. env_set internal procedure shares stack frame of external procedure cobol_lexeme. env_init internal procedure shares stack frame of external procedure cobol_lexeme. get_token internal procedure shares stack frame of external procedure cobol_lexeme. cont_lit internal procedure shares stack frame of external procedure cobol_lexeme. space internal procedure shares stack frame of external procedure cobol_lexeme. look internal procedure shares stack frame of external procedure cobol_lexeme. p_test internal procedure shares stack frame of external procedure cobol_lexeme. merge internal procedure shares stack frame of external procedure cobol_lexeme. next_cont internal procedure shares stack frame of external procedure cobol_lexeme. move_char internal procedure shares stack frame of external procedure cobol_lexeme. move_lit_char internal procedure shares stack frame of external procedure cobol_lexeme. m_c internal procedure shares stack frame of external procedure cobol_lexeme. get_line internal procedure shares stack frame of external procedure cobol_lexeme. fill_next_line internal procedure shares stack frame of external procedure cobol_lexeme. seek_word internal procedure shares stack frame of external procedure cobol_lexeme. sw1 internal procedure shares stack frame of external procedure cobol_lexeme. sw3 internal procedure shares stack frame of external procedure cobol_lexeme. sw4 internal procedure shares stack frame of external procedure cobol_lexeme. sw5 internal procedure shares stack frame of external procedure cobol_lexeme. test_hdr internal procedure shares stack frame of external procedure cobol_lexeme. tedp internal procedure shares stack frame of external procedure cobol_lexeme. per_test internal procedure shares stack frame of external procedure cobol_lexeme. test_word internal procedure shares stack frame of external procedure cobol_lexeme. test_pn internal procedure shares stack frame of external procedure cobol_lexeme. gt internal procedure shares stack frame of external procedure cobol_lexeme. GT internal procedure shares stack frame of external procedure cobol_lexeme. GT1 internal procedure shares stack frame of external procedure cobol_lexeme. SW internal procedure shares stack frame of external procedure cobol_lexeme. swm internal procedure shares stack frame of external procedure cobol_lexeme. swnm internal procedure shares stack frame of external procedure cobol_lexeme. form_str internal procedure shares stack frame of external procedure cobol_lexeme. alloc_lexeme internal procedure shares stack frame of external procedure cobol_lexeme. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 state cobol_lexeme STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME cobol_lexeme 000100 bc cobol_lexeme 000101 code cobol_lexeme 000102 ch cobol_lexeme 000103 ch2 cobol_lexeme 000104 key_word cobol_lexeme 000115 cont cobol_lexeme 000116 new_line cobol_lexeme 000117 more cobol_lexeme 000120 scan_mode cobol_lexeme 000121 res cobol_lexeme 000122 dec_pt_count cobol_lexeme 000123 sign_count cobol_lexeme 000124 mask cobol_lexeme 000125 i cobol_lexeme 000126 j cobol_lexeme 000130 p cobol_lexeme 000132 file_name cobol_lexeme 000145 old cobol_lexeme 000146 new cobol_lexeme 000147 size cobol_lexeme 000150 tok_size cobol_lexeme 000151 dir_name cobol_lexeme 000223 entry_name cobol_lexeme 000233 e_offset cobol_lexeme 000234 b cobol_lexeme 000260 ldn cobol_lexeme 000261 tf cobol_lexeme 000262 found cobol_lexeme 000264 swexit cobol_lexeme 000270 ident cobol_lexeme 000275 div cobol_lexeme 000300 env cobol_lexeme 000304 dat cobol_lexeme 000306 proc cobol_lexeme 000312 cpy cobol_lexeme 000314 rpl cobol_lexeme 000317 m_t cobol_lexeme 000354 x_i cobol_lexeme 000572 ch env_set 000574 p env_set 000714 sl fill_next_line 000715 sz fill_next_line 000716 ch fill_next_line 000720 p fill_next_line 001054 p swm 001064 p swnm THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as alloc_char_temp call_ext_out_desc call_ext_out return_mac tra_ext_2 shorten_stack ext_entry ext_entry_desc op_alloc_ op_freen_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. find_include_file_$initiate_count hcs_$fs_get_path_name hcs_$initiate_count hcs_$set_bc_seg THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$segknown error_table_$zero_length_seg LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 1282 000204 1284 000211 1286 000215 1288 000222 1290 000226 1292 000233 1294 000237 1769 000244 1921 001646 33 002506 112 002517 114 002520 116 002530 120 002552 122 002553 124 002563 126 002564 129 002565 132 002575 134 002610 135 002615 136 002625 138 002627 139 002635 140 002645 142 002647 144 002662 145 002667 146 002675 148 002677 149 002705 150 002713 153 002715 154 002720 156 002721 159 002722 162 002732 163 002737 166 002744 172 002745 176 002755 177 002766 179 002767 182 003007 183 003015 185 003017 187 003026 189 003030 191 003031 194 003037 197 003101 199 003113 201 003114 204 003115 208 003123 209 003133 288 003134 291 003144 293 003150 295 003151 297 003152 301 003162 303 003167 305 003170 309 003171 312 003201 314 003206 316 003207 319 003214 321 003217 323 003224 324 003225 326 003226 327 003227 329 003231 330 003233 332 003236 334 003237 337 003244 340 003254 341 003257 345 003260 346 003265 350 003270 352 003271 355 003276 357 003300 359 003303 361 003304 366 003311 369 003323 371 003324 373 003332 375 003333 377 003336 378 003344 380 003346 384 003347 387 003357 389 003360 391 003370 393 003371 395 003372 401 003373 404 003403 406 003404 211 003405 215 003407 216 003440 218 003504 221 003511 224 003512 226 003513 233 003514 235 003516 236 003522 237 003527 240 003533 244 003537 245 003541 248 003547 251 003550 254 003566 255 003567 262 003570 264 003575 266 003576 269 003577 270 003604 271 003605 272 003607 273 003612 275 003616 276 003620 278 003621 280 003636 281 003642 282 003644 284 003650 286 003651 408 003652 411 003653 413 003660 414 003662 415 003663 419 003664 422 003665 423 003667 424 003671 425 003673 426 003702 428 003704 431 003713 433 003716 435 003720 437 003723 439 003725 440 003727 442 003730 443 003733 446 003735 447 003736 448 003740 451 003741 453 003746 456 003753 458 003755 460 003756 461 003760 462 003761 468 003763 470 003764 473 003765 481 003774 483 003776 486 004000 488 004001 490 004002 492 004004 497 004017 502 004033 507 004052 509 004053 514 004070 515 004071 523 004072 526 004074 529 004076 531 004077 533 004100 535 004102 537 004103 541 004105 544 004110 546 004111 548 004113 550 004114 554 004142 555 004144 557 004145 562 004146 565 004150 567 004151 568 004153 571 004154 574 004165 576 004166 578 004170 581 004171 584 004175 588 004176 590 004177 593 004200 595 004202 599 004205 601 004206 603 004210 607 004211 609 004215 613 004216 615 004217 618 004220 622 004221 625 004232 626 004233 628 004235 632 004236 638 004237 643 004240 646 004242 648 004243 650 004244 652 004246 654 004247 657 004264 658 004266 659 004270 662 004271 664 004272 670 004273 673 004275 675 004277 677 004300 679 004301 681 004303 683 004310 684 004311 687 004312 690 004327 691 004331 694 004332 699 004333 702 004335 704 004336 706 004337 708 004341 710 004342 713 004343 716 004346 718 004347 720 004350 722 004352 724 004353 730 004354 735 004355 740 004357 743 004360 746 004361 748 004363 750 004364 757 004365 761 004372 764 004374 766 004375 768 004377 770 004400 772 004402 773 004403 777 004404 779 004412 782 004415 785 004423 788 004431 789 004433 790 004441 798 004443 803 004444 806 004446 808 004447 813 004450 816 004452 818 004453 824 004454 827 004456 829 004457 831 004460 833 004462 835 004463 838 004500 839 004502 840 004504 843 004505 845 004506 851 004507 854 004511 856 004514 858 004515 860 004526 862 004531 864 004532 867 004540 869 004542 871 004544 873 004545 877 004547 880 004550 884 004551 888 004552 893 004553 895 004554 897 004556 898 004560 901 004561 905 004562 908 004565 909 004572 911 004574 913 004604 915 004605 917 004606 919 004610 920 004612 923 004613 926 004617 927 004624 928 004626 930 004630 935 004631 937 004632 939 004634 940 004636 944 004637 946 004644 948 004645 949 004646 951 004647 955 004650 956 004655 958 004657 960 004670 962 004671 964 004672 966 004701 968 004703 971 004706 973 004707 975 004711 977 004714 979 004715 981 004723 984 004727 988 004740 993 004746 994 004750 995 004752 996 004753 998 004754 999 004756 1000 004760 1002 004761 1003 004762 1004 004763 1006 004764 1014 004765 1015 004767 1017 004771 1020 004777 1022 005005 1026 005013 1029 005024 1031 005025 1033 005027 1034 005031 1037 005032 1038 005034 1043 005035 1045 005041 1048 005045 1051 005046 1052 005050 1054 005055 1056 005056 1057 005057 1060 005063 1063 005064 1064 005066 1066 005067 1068 005070 1071 005071 1074 005113 1076 005114 1079 005115 1081 005116 1084 005121 1087 005131 1089 005134 1091 005135 1093 005143 1095 005145 1097 005157 1099 005160 1101 005161 1103 005165 1105 005167 1108 005170 1109 005171 1110 005172 1112 005173 1115 005174 1117 005175 1120 005203 1123 005207 1126 005215 1127 005217 1129 005220 1132 005221 1133 005222 1135 005223 1137 005224 1140 005225 1141 005227 1143 005230 1145 005231 1148 005232 1151 005241 1153 005250 1156 005256 1157 005257 1159 005260 1162 005266 1164 005267 1167 005270 1171 005271 1173 005300 1175 005301 1176 005312 1178 005313 1181 005316 1185 005317 1188 005322 1189 005330 1191 005331 1194 005334 1196 005335 1198 005336 1205 005337 1207 005345 1208 005346 1210 005354 1212 005355 1215 005364 1217 005375 1220 005407 1221 005411 1222 005413 1223 005415 1225 005421 1227 005423 1229 005425 1231 005432 1233 005435 1235 005437 1237 005444 1239 005451 1242 005452 1245 005457 1296 005460 1300 005461 1306 005464 1308 005467 1311 005470 1313 005471 1316 005472 1318 005473 1321 005474 1323 005475 1326 005476 1328 005477 1331 005500 1336 005501 1339 005502 1343 005503 1346 005504 1349 005505 1351 005513 1355 005516 1357 005524 1361 005527 1363 005533 1365 005537 1366 005540 1368 005541 1375 005542 1378 005543 1380 005551 1384 005554 1386 005560 1390 005563 1392 005567 1396 005573 1397 005574 1399 005575 1403 005576 1406 005577 1408 005605 1412 005610 1414 005614 1418 005620 1419 005622 1420 005625 1422 005626 1426 005627 1429 005630 1432 005631 1434 005637 1438 005642 1440 005646 1442 005651 1444 005652 1446 005653 1454 005655 1457 005664 1460 005670 1464 005673 1467 005674 1469 005700 1473 005702 1476 005703 1478 005704 1482 005706 1483 005712 1485 005713 1490 005715 1492 005716 1496 005717 1498 005723 1502 005726 1504 005732 1508 005735 1510 005741 1512 005742 1516 005743 1519 005761 1521 005762 1523 005763 1531 005765 1533 006006 1535 006007 1537 006010 1544 006012 1547 006013 1549 006014 1553 006016 1554 006020 1555 006024 1557 006025 1562 006027 1564 006030 1568 006031 1571 006033 1572 006034 1576 006035 1579 006036 1582 006045 1584 006046 1588 006047 1591 006050 1594 006061 1597 006062 1599 006063 1601 006064 1605 006065 1608 006066 1611 006074 1614 006075 1616 006076 1618 006077 1621 006100 1623 006101 1628 006127 1629 006130 1631 006131 1633 006132 1639 006133 1643 006141 1644 006144 1645 006146 1647 006150 1651 006175 1652 006176 1655 006177 1657 006200 1659 006202 1661 006203 1663 006205 1664 006206 1668 006207 1670 006210 1676 006211 1679 006217 1680 006222 1681 006224 1683 006226 1687 006254 1688 006255 1691 006256 1693 006257 1695 006260 1698 006261 1700 006264 1702 006272 1704 006273 1707 006276 1709 006305 1712 006310 1715 006330 1716 006334 1717 006336 1719 006340 1721 006341 1724 006342 1726 006347 1727 006351 1729 006354 1731 006371 1734 006403 1736 006410 1737 006415 1738 006417 1741 006420 1742 006421 1744 006424 1746 006441 1749 006453 1751 006460 1752 006465 1754 006467 ----------------------------------------------------------- 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