COMPILATION LISTING OF SEGMENT alm_table_tool Compiled by: Multics PL/I Compiler, Release 31a, of October 12, 1988 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 10/17/88 1012.8 mst Mon Options: optimize table map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1988 * 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 15 /****^ HISTORY COMMENTS: 16* 1) change(86-11-04,JRGray), approve(86-11-04,MCR7507), 17* audit(86-11-05,RWaters), install(86-11-12,MR12.0-1202): 18* Modified to transparently handle history comments in the 'include' files. 19* 2) change(88-09-07,JRGray), approve(88-09-07,MCR7952), 20* audit(88-09-30,WAAnderson), install(88-10-17,MR12.2-1169): 21* Modified to remind that this program must be compiled with -table. Also 22* fixed Capitalization problems. 23* END HISTORY COMMENTS */ 24 25 26 att:alm_table_tool: proc options(variable); 27 28 /* Note: as this program calls cds, it must be compiled with -table */ 29 30 /* alm_table_tool takes as input two include files, a table of [instructions X 31*decors] (DECOR_TABLE.incl.pl1) and a list of opcode defining ALM macros 32*(defops.incl.alm) from oplook_.alm, and produces as output a new version of 33*defops.incl.alm and two external static data structures: alm_data2, a bit 34*table denoting decor_class/decor compatibility, and alm_data1, a decor name 35*table used to assign numeric codes to the decors. Both structures are 36*referenced by pass1_ and pass2_. 37* 38* alm_table_tool is currently implemented as a command. 39* 40* Usage: alm_table_tool PATH1 PATH2 41* 42* where PATH1 is DECOR_TABLE.incl.pl1 43* and 44* PATH2 is defops.incl.alm 45* 46* DECOR_TABLE.incl.pl1 and defops.incl.alm must conform to certain 47*standards to be accepted by alm_table_tool. Since there are already current 48*versions of both, one simple way to avoid running afoul of these standards is 49*to make changes to the existing versions consistent with their current form. 50*At this writing, DECOR_TABLE.incl.pl1 is %included as a huge PL1 comment in 51*alm_table_tool itself. Defops.incl.alm is %included in oplook_.alm. 52* 53* Assumptions about DECOR_TABLE.incl.alm: 54* 55* alm_table_tool assumes that the entire include file is a pl1 56*comment. It assumes that the table consists of two parts, the first preceded 57*by the keyword "NAMES:" and the second preceded by the keyword "TABLE:". It 58*assumes that the names section consists of a series of definitions separated 59*by whitespace. Each definition consists of a dummy name (any character string 60*except "table") followed immediately by a colon, and a series of synonyms 61*(separated by whitespace and terminated by a semicolon). In the table 62*section, there must be one column for each dummy name in the names section, 63*headed by that dummy name. alm_table_tool uses the dummy names only to 64*coordinate synonyms with table columns. Any name that is to be used as an 65*operand to the decor pseudo-op should be included as a synonym to some dummy 66*name in the names section. alm_table_tool assumes that there is a "|" 67*delimiter between each column header and one after the last header. It 68*assumes the "-------------------------------------------" boundary follows. 69*For each row, it assumes a "|" delimiter after the instruction name, one 70*between each row/column intersection, and one at the end of the row. (Just 71*the kind of thing you'd expect). If a given instruction is not in a given 72*decor, then whitespace should appear at the intersection of the instruction's 73*row and decor's column on the table, otherwise an "X" should appear 74*(alm_table_tool will also accept "x"). alm_table_tool assumes that a row 75*terminates with a new_line character. 76* 77* 78* 79* Assumptions about defops.incl.alm: 80* 81* alm_table_tool assumes that "defop" is the name of the macro, that 82*there are no spaces between members of the operand list, and that the last 83*operand of every defop denotes decor class. If one finds it desirable to 84*alter any of these features of the macro, one should also alter alm_table_tool 85*to handle the change. alm_table_tool also assumes that the defop segment it 86*receives as input has nothing else but defop macros in it. 87* 88* 89* alm_table_tool's output: 90* 91* alm_table_tool writes new versions of defops.incl.alm, alm_data1, 92*and alm_data2 in the working directory. Oplook_.alm must be reassembled to 93*incorporate the new defop macros. Alm_data1 and alm_data2, which are 94*referenced by pass1_.pl1 and pass2_.pl1, need merely be replaced 95*in bound_alm by the new versions. Pass1_.pl1 and pass2_.pl1 need not be 96*recompiled. 97* 98* 99*IMPLEMENTATION STRATEGY: 100* 101* Each instr in DECOR_TABLE.incl.pl1 is a memeber of exactly one decor 102*class. A decor class is simply a compound predicate stating which set of 103*decors its members belong to. Since a row in the DECOR_TABLE is a vector with 104*a boolean (yes or no) slot for each decor, unique values of this vector denote 105*unique decor classes. alm_table_tool thus establishes an initial numbering of 106*decor classes by letting the binary value of the boolean vector number the 107*class denoted by that vector. Thus: 108* 109* | A | B | C | D | 110* ----------|----------------- 111* instr | X | | X | | 112* 113*tells us that instr is in decor class "1010" = 9; 114* 115* Since not all possible classes are likely to be used (not all 116*possible bit patterns are represented by some row), the classes are then 117*renumbered so that if n classes are used they are numbered from 0 to n-1. 118*The table of decor_class/decor compatibilty (alm_data2) is then simply built 119*by "stacking" the bit patterns for each class on top of each other with class 120*0 at the top and class n-1 at the bottom. The class no for each instr (derived 121*from the bit pattern of its row in the table) is then placed in the 122*appropriate field for each instr in the defop macros of defops.incl.alm. The 123*main passes of the assembler will check instr/decor compatibility by first 124*calling oplook_ to get the decor_class for a given instr, and then taking the 125*decor_class as a row index and the current decor as a column index into 126*alm_data2. 127* 128*/* DECOR_TABLE.incl.pl1 */ 129 1 1 /* Begin include file DECOR_TABLE.incl.pl1. */ 1 2 1 3 1 4 /****^ HISTORY COMMENTS: 1 5* 1) change(86-11-04,JRGray), approve(86-11-04,MCR7507), 1 6* audit(86-11-05,RWaters), install(86-11-12,MR12.0-1202): 1 7* Modified to add init_link pseudo-operation. 1 8* 2) change(86-11-14,JRGray), approve(86-11-14,MCR7568), 1 9* audit(86-11-21,RWaters), install(86-11-26,MR12.0-1228): 1 10* Also MCR7572. Modified to add the three new pseudo-ops: ext_entry, 1 11* oct_unal, and dec_unal. 1 12* 3) change(88-03-21,JRGray), approve(88-08-05,MCR7952), 1 13* audit(88-09-30,WAAnderson), install(88-10-17,MR12.2-1169): 1 14* Modified for symbol table support to add 12 new pseudos: 1 15* block, end_block, enum, end_enum, source, end_source, statement, 1 16* structure, end_structure, symbol, union, and end_union. 1 17* END HISTORY COMMENTS */ 1 18 1 19 /* This include file is used as input to alm_table tool to define 1 20* decor classes. */ 1 21 1 22 /* NAMES: A: Level68; 1 23* B: ADP; 1 24* 1 25* TABLE: 1 26* 1 27* | A | B | 1 28* ------------------- 1 29* a4bd | X | X | 1 30* a4bdx | X | X | 1 31* a6bd | X | X | 1 32* a6bdx | X | X | 1 33* a9bd | X | X | 1 34* a9bdx | X | X | 1 35* aar | X | X | 1 36* aar0 | X | X | 1 37* aar1 | X | X | 1 38* aar2 | X | X | 1 39* aar3 | X | X | 1 40* aar4 | X | X | 1 41* aar5 | X | X | 1 42* aar6 | X | X | 1 43* aar7 | X | X | 1 44* aarab | X | X | 1 45* aarap | X | X | 1 46* aarbb | X | X | 1 47* aarbp | X | X | 1 48* aarlb | X | X | 1 49* aarlp | X | X | 1 50* aarsb | X | X | 1 51* aarsp | X | X | 1 52* abd | X | X | 1 53* abdx | X | X | 1 54* absa | X | X | 1 55* ac4 | X | X | 1 56* acc | X | X | 1 57* aci | X | X | 1 58* ad2d | X | X | 1 59* ad2dx | | X | 1 60* ad3d | X | X | 1 61* ad3dx | | X | 1 62* ada | X | X | 1 63* adaq | X | X | 1 64* ade | X | X | 1 65* adl | X | X | 1 66* adla | X | X | 1 67* adlaq | X | X | 1 68* adlq | X | X | 1 69* adlx | X | X | 1 70* adlx0 | X | X | 1 71* adlx1 | X | X | 1 72* adlx2 | X | X | 1 73* adlx3 | X | X | 1 74* adlx4 | X | X | 1 75* adlx5 | X | X | 1 76* adlx6 | X | X | 1 77* adlx7 | X | X | 1 78* adq | X | X | 1 79* adwp | X | X | 1 80* adwp0 | X | X | 1 81* adwp1 | X | X | 1 82* adwp2 | X | X | 1 83* adwp3 | X | X | 1 84* adwp4 | X | X | 1 85* adwp5 | X | X | 1 86* adwp6 | X | X | 1 87* adwp7 | X | X | 1 88* adwpab | X | X | 1 89* adwpap | X | X | 1 90* adwpbb | X | X | 1 91* adwpbp | X | X | 1 92* adwplb | X | X | 1 93* adwplp | X | X | 1 94* adwpsb | X | X | 1 95* adwpsp | X | X | 1 96* adx | X | X | 1 97* adx0 | X | X | 1 98* adx1 | X | X | 1 99* adx2 | X | X | 1 100* adx3 | X | X | 1 101* adx4 | X | X | 1 102* adx5 | X | X | 1 103* adx6 | X | X | 1 104* adx7 | X | X | 1 105* alr | X | X | 1 106* als | X | X | 1 107* altretur | X | X | 1 108* ana | X | X | 1 109* anaq | X | X | 1 110* anq | X | X | 1 111* ansa | X | X | 1 112* ansq | X | X | 1 113* ansx | X | X | 1 114* ansx0 | X | X | 1 115* ansx1 | X | X | 1 116* ansx2 | X | X | 1 117* ansx3 | X | X | 1 118* ansx4 | X | X | 1 119* ansx5 | X | X | 1 120* ansx6 | X | X | 1 121* ansx7 | X | X | 1 122* anx | X | X | 1 123* anx0 | X | X | 1 124* anx1 | X | X | 1 125* anx2 | X | X | 1 126* anx3 | X | X | 1 127* anx4 | X | X | 1 128* anx5 | X | X | 1 129* anx6 | X | X | 1 130* anx7 | X | X | 1 131* aos | X | X | 1 132* ara | X | X | 1 133* ara0 | X | X | 1 134* ara1 | X | X | 1 135* ara2 | X | X | 1 136* ara3 | X | X | 1 137* ara4 | X | X | 1 138* ara5 | X | X | 1 139* ara6 | X | X | 1 140* ara7 | X | X | 1 141* araab | X | X | 1 142* araap | X | X | 1 143* arabb | X | X | 1 144* arabp | X | X | 1 145* aralb | X | X | 1 146* aralp | X | X | 1 147* arasb | X | X | 1 148* arasp | X | X | 1 149* arg | X | X | 1 150* arl | X | X | 1 151* arn | X | X | 1 152* arn0 | X | X | 1 153* arn1 | X | X | 1 154* arn2 | X | X | 1 155* arn3 | X | X | 1 156* arn4 | X | X | 1 157* arn5 | X | X | 1 158* arn6 | X | X | 1 159* arn7 | X | X | 1 160* arnab | X | X | 1 161* arnap | X | X | 1 162* arnbb | X | X | 1 163* arnbp | X | X | 1 164* arnlb | X | X | 1 165* arnlp | X | X | 1 166* arnsb | X | X | 1 167* arnsp | X | X | 1 168* ars | X | X | 1 169* asa | X | X | 1 170* asq | X | X | 1 171* asx | X | X | 1 172* asx0 | X | X | 1 173* asx1 | X | X | 1 174* asx2 | X | X | 1 175* asx3 | X | X | 1 176* asx4 | X | X | 1 177* asx5 | X | X | 1 178* asx6 | X | X | 1 179* asx7 | X | X | 1 180* awca | X | X | 1 181* awcq | X | X | 1 182* awd | X | X | 1 183* awdx | X | X | 1 184* basref | X | X | 1 185* bcd | X | X | 1 186* bci | X | X | 1 187* bfs | X | X | 1 188* block | X | X | 1 189* bool | X | X | 1 190* bss | X | X | 1 191* btd | X | X | 1 192* call | X | X | 1 193* call6 | X | X | 1 194* callsp | X | X | 1 195* camp | X | | 1 196* camp0 | | X | 1 197* camp1 | | X | 1 198* camp2 | | X | 1 199* camp3 | | X | 1 200* cams | X | | 1 201* cams0 | | X | 1 202* cams1 | | X | 1 203* cana | X | X | 1 204* canaq | X | X | 1 205* canq | X | X | 1 206* canx | X | X | 1 207* canx0 | X | X | 1 208* canx1 | X | X | 1 209* canx2 | X | X | 1 210* canx3 | X | X | 1 211* canx4 | X | X | 1 212* canx5 | X | X | 1 213* canx6 | X | X | 1 214* canx7 | X | X | 1 215* ccac0 | | X | 1 216* ccac1 | | X | 1 217* cioc | X | X | 1 218* cmg | X | X | 1 219* cmk | X | X | 1 220* cmpa | X | X | 1 221* cmpaq | X | X | 1 222* cmpb | X | X | 1 223* cmpc | X | X | 1 224* cmpct | | X | 1 225* cmpn | X | X | 1 226* cmpnx | | X | 1 227* cmpq | X | X | 1 228* cmpx | X | X | 1 229* cmpx0 | X | X | 1 230* cmpx1 | X | X | 1 231* cmpx2 | X | X | 1 232* cmpx3 | X | X | 1 233* cmpx4 | X | X | 1 234* cmpx5 | X | X | 1 235* cmpx6 | X | X | 1 236* cmpx7 | X | X | 1 237* cnaa | X | X | 1 238* cnaaq | X | X | 1 239* cnaq | X | X | 1 240* cnax | X | X | 1 241* cnax0 | X | X | 1 242* cnax1 | X | X | 1 243* cnax2 | X | X | 1 244* cnax3 | X | X | 1 245* cnax4 | X | X | 1 246* cnax5 | X | X | 1 247* cnax6 | X | X | 1 248* cnax7 | X | X | 1 249* csl | X | X | 1 250* csr | X | X | 1 251* cwl | X | X | 1 252* dec | X | X | 1 253* dec_unal | X | X | 1 254* decor | X | X | 1 255* desc4a | X | X | 1 256* desc4fl | X | X | 1 257* desc4ls | X | X | 1 258* desc4ns | X | X | 1 259* desc4ts | X | X | 1 260* desc6a | X | X | 1 261* desc9a | X | X | 1 262* desc9fl | X | X | 1 263* desc9ls | X | X | 1 264* desc9ns | X | X | 1 265* desc9ts | X | X | 1 266* descb | X | X | 1 267* dfad | X | X | 1 268* dfcmg | X | X | 1 269* dfcmp | X | X | 1 270* dfdi | X | X | 1 271* dfdv | X | X | 1 272* dfld | X | X | 1 273* dfmp | X | X | 1 274* dfrd | X | X | 1 275* dfsb | X | X | 1 276* dfst | X | X | 1 277* dfstr | X | X | 1 278* dis | X | X | 1 279* div | X | X | 1 280* drl | X | X | 1 281* dtb | X | X | 1 282* dufa | X | X | 1 283* dufm | X | X | 1 284* dufs | X | X | 1 285* dup | X | X | 1 286* dupend | X | X | 1 287* dv2d | X | X | 1 288* dv2dx | | X | 1 289* dv3d | X | X | 1 290* dv3dx | | X | 1 291* dvf | X | X | 1 292* eaa | X | X | 1 293* eaq | X | X | 1 294* easp | X | X | 1 295* easp0 | X | X | 1 296* easp1 | X | X | 1 297* easp2 | X | X | 1 298* easp3 | X | X | 1 299* easp4 | X | X | 1 300* easp5 | X | X | 1 301* easp6 | X | X | 1 302* easp7 | X | X | 1 303* easpab | X | X | 1 304* easpap | X | X | 1 305* easpbb | X | X | 1 306* easpbp | X | X | 1 307* easplb | X | X | 1 308* easplp | X | X | 1 309* easpsb | X | X | 1 310* easpsp | X | X | 1 311* eawp | X | X | 1 312* eawp0 | X | X | 1 313* eawp1 | X | X | 1 314* eawp2 | X | X | 1 315* eawp3 | X | X | 1 316* eawp4 | X | X | 1 317* eawp5 | X | X | 1 318* eawp6 | X | X | 1 319* eawp7 | X | X | 1 320* eawpab | X | X | 1 321* eawpap | X | X | 1 322* eawpbb | X | X | 1 323* eawpbp | X | X | 1 324* eawplb | X | X | 1 325* eawplp | X | X | 1 326* eawpsb | X | X | 1 327* eawpsp | X | X | 1 328* eax | X | X | 1 329* eax0 | X | X | 1 330* eax1 | X | X | 1 331* eax2 | X | X | 1 332* eax3 | X | X | 1 333* eax4 | X | X | 1 334* eax5 | X | X | 1 335* eax6 | X | X | 1 336* eax7 | X | X | 1 337* eight | X | X | 1 338* end | X | X | 1 339* end_bloc | X | X | 1 340* end_enum | X | X | 1 341* end_sour | X | X | 1 342* end_stru | X | X | 1 343* end_unio | X | X | 1 344* entry | X | X | 1 345* entrybou | X | X | 1 346* enum | X | X | 1 347* epaq | X | X | 1 348* epat | | X | 1 349* epbp | X | X | 1 350* epbp0 | X | X | 1 351* epbp1 | X | X | 1 352* epbp2 | X | X | 1 353* epbp3 | X | X | 1 354* epbp4 | X | X | 1 355* epbp5 | X | X | 1 356* epbp6 | X | X | 1 357* epbp7 | X | X | 1 358* epbpab | X | X | 1 359* epbpap | X | X | 1 360* epbpbb | X | X | 1 361* epbpbp | X | X | 1 362* epbplb | X | X | 1 363* epbplp | X | X | 1 364* epbpsb | X | X | 1 365* epbpsp | X | X | 1 366* epp | X | X | 1 367* epp0 | X | X | 1 368* epp1 | X | X | 1 369* epp2 | X | X | 1 370* epp3 | X | X | 1 371* epp4 | X | X | 1 372* epp5 | X | X | 1 373* epp6 | X | X | 1 374* epp7 | X | X | 1 375* eppab | X | X | 1 376* eppap | X | X | 1 377* eppbb | X | X | 1 378* eppbp | X | X | 1 379* epplb | X | X | 1 380* epplp | X | X | 1 381* eppsb | X | X | 1 382* eppsp | X | X | 1 383* equ | X | X | 1 384* era | X | X | 1 385* eraq | X | X | 1 386* erq | X | X | 1 387* error | X | X | 1 388* ersa | X | X | 1 389* ersq | X | X | 1 390* ersx | X | X | 1 391* ersx0 | X | X | 1 392* ersx1 | X | X | 1 393* ersx2 | X | X | 1 394* ersx3 | X | X | 1 395* ersx4 | X | X | 1 396* ersx5 | X | X | 1 397* ersx6 | X | X | 1 398* ersx7 | X | X | 1 399* erx | X | X | 1 400* erx0 | X | X | 1 401* erx1 | X | X | 1 402* erx2 | X | X | 1 403* erx3 | X | X | 1 404* erx4 | X | X | 1 405* erx5 | X | X | 1 406* erx6 | X | X | 1 407* erx7 | X | X | 1 408* even | X | X | 1 409* ext_entr | X | X | 1 410* fad | X | X | 1 411* fcmg | X | X | 1 412* fcmp | X | X | 1 413* fdi | X | X | 1 414* fdv | X | X | 1 415* firstref | X | X | 1 416* fld | X | X | 1 417* fmp | X | X | 1 418* fneg | X | X | 1 419* fno | X | X | 1 420* followon | X | X | 1 421* frd | X | X | 1 422* fsb | X | X | 1 423* fst | X | X | 1 424* fstr | X | X | 1 425* fszn | X | X | 1 426* getlp | X | X | 1 427* gtb | X | X | 1 428* halt | | X | 1 429* include | X | X | 1 430* inhibit | X | X | 1 431* init_lin | X | X | 1 432* itb | X | X | 1 433* itp | X | X | 1 434* its | X | X | 1 435* join | X | X | 1 436* lar | X | X | 1 437* lar0 | X | X | 1 438* lar1 | X | X | 1 439* lar2 | X | X | 1 440* lar3 | X | X | 1 441* lar4 | X | X | 1 442* lar5 | X | X | 1 443* lar6 | X | X | 1 444* lar7 | X | X | 1 445* larab | X | X | 1 446* larap | X | X | 1 447* larbb | X | X | 1 448* larbp | X | X | 1 449* lareg | X | X | 1 450* larlb | X | X | 1 451* larlp | X | X | 1 452* larsb | X | X | 1 453* larsp | X | X | 1 454* lbar | X | X | 1 455* lca | X | X | 1 456* lcaq | X | X | 1 457* lccl | | X | 1 458* lcpr | X | | 1 459* lcq | X | X | 1 460* lcx | X | X | 1 461* lcx0 | X | X | 1 462* lcx1 | X | X | 1 463* lcx2 | X | X | 1 464* lcx3 | X | X | 1 465* lcx4 | X | X | 1 466* lcx5 | X | X | 1 467* lcx6 | X | X | 1 468* lcx7 | X | X | 1 469* lda | X | X | 1 470* ldab | | X | 1 471* ldac | X | X | 1 472* ldaq | X | X | 1 473* ldat | | X | 1 474* ldbr | X | X | 1 475* ldcb | | X | 1 476* lde | X | X | 1 477* ldfb | | X | 1 478* ldhb | | X | 1 479* ldhc | | X | 1 480* ldi | X | X | 1 481* ldo | | X | 1 482* ldq | X | X | 1 483* ldqc | X | X | 1 484* ldt | X | X | 1 485* ldx | X | X | 1 486* ldx0 | X | X | 1 487* ldx1 | X | X | 1 488* ldx2 | X | X | 1 489* ldx3 | X | X | 1 490* ldx4 | X | X | 1 491* ldx5 | X | X | 1 492* ldx6 | X | X | 1 493* ldx7 | X | X | 1 494* lfr | | X | 1 495* lgcos | | X | 1 496* lhfer | | X | 1 497* lhpt | | X | 1 498* lhtr | | X | 1 499* limr | | X | 1 500* link | X | X | 1 501* llr | X | X | 1 502* lls | X | X | 1 503* lmsd | | X | 1 504* lpl | X | X | 1 505* lpri | X | X | 1 506* lpri0 | | X | 1 507* lpri1 | | X | 1 508* lpri2 | | X | 1 509* lpri3 | | X | 1 510* lpri4 | | X | 1 511* lpri5 | | X | 1 512* lpri6 | | X | 1 513* lpri7 | | X | 1 514* lpris0 | | X | 1 515* lpris1 | | X | 1 516* lpris2 | | X | 1 517* lpris3 | | X | 1 518* lpris4 | | X | 1 519* lpris5 | | X | 1 520* lpris6 | | X | 1 521* lpris7 | | X | 1 522* lprp | X | X | 1 523* lprp0 | X | X | 1 524* lprp1 | X | X | 1 525* lprp2 | X | X | 1 526* lprp3 | X | X | 1 527* lprp4 | X | X | 1 528* lprp5 | X | X | 1 529* lprp6 | X | X | 1 530* lprp7 | X | X | 1 531* lprpab | X | X | 1 532* lprpap | X | X | 1 533* lprpbb | X | X | 1 534* lprpbp | X | X | 1 535* lprplb | X | X | 1 536* lprplp | X | X | 1 537* lprpsb | X | X | 1 538* lprpsp | X | X | 1 539* lptp | X | | 1 540* lptr | X | | 1 541* lra | X | X | 1 542* lreg | X | X | 1 543* lrl | X | X | 1 544* lrmb | | X | 1 545* lrs | X | X | 1 546* lsdp | X | | 1 547* lsdr | X | | 1 548* lvms | | X | 1 549* lxl | X | X | 1 550* lxl0 | X | X | 1 551* lxl1 | X | X | 1 552* lxl2 | X | X | 1 553* lxl3 | X | X | 1 554* lxl4 | X | X | 1 555* lxl5 | X | X | 1 556* lxl6 | X | X | 1 557* lxl7 | X | X | 1 558* maclist | X | X | 1 559* macro | X | X | 1 560* mlr | X | X | 1 561* mme | X | X | 1 562* mme1 | X | X | 1 563* mme2 | X | X | 1 564* mme3 | X | X | 1 565* mme4 | X | X | 1 566* mmf | | X | 1 567* mod | X | X | 1 568* movdef | X | X | 1 569* mp2d | X | X | 1 570* mp2dx | | X | 1 571* mp3d | X | X | 1 572* mp3dx | | X | 1 573* mpf | X | X | 1 574* mpy | X | X | 1 575* mrf | | X | 1 576* mrl | X | X | 1 577* mve | X | X | 1 578* mvn | X | X | 1 579* mvne | X | X | 1 580* mvnex | | X | 1 581* mvnx | | X | 1 582* mvt | X | X | 1 583* name | X | X | 1 584* nar | X | X | 1 585* nar0 | X | X | 1 586* nar1 | X | X | 1 587* nar2 | X | X | 1 588* nar3 | X | X | 1 589* nar4 | X | X | 1 590* nar5 | X | X | 1 591* nar6 | X | X | 1 592* nar7 | X | X | 1 593* narab | X | X | 1 594* narap | X | X | 1 595* narbb | X | X | 1 596* narbp | X | X | 1 597* narlb | X | X | 1 598* narlp | X | X | 1 599* narsb | X | X | 1 600* narsp | X | X | 1 601* neg | X | X | 1 602* negl | X | X | 1 603* nop | X | X | 1 604* null | X | X | 1 605* oct | X | X | 1 606* oct_unal | X | X | 1 607* odd | X | X | 1 608* ora | X | X | 1 609* oraq | X | X | 1 610* org | X | X | 1 611* orq | X | X | 1 612* orsa | X | X | 1 613* orsq | X | X | 1 614* orsx | X | X | 1 615* orsx0 | X | X | 1 616* orsx1 | X | X | 1 617* orsx2 | X | X | 1 618* orsx3 | X | X | 1 619* orsx4 | X | X | 1 620* orsx5 | X | X | 1 621* orsx6 | X | X | 1 622* orsx7 | X | X | 1 623* orx | X | X | 1 624* orx0 | X | X | 1 625* orx1 | X | X | 1 626* orx2 | X | X | 1 627* orx3 | X | X | 1 628* orx4 | X | X | 1 629* orx5 | X | X | 1 630* orx6 | X | X | 1 631* orx7 | X | X | 1 632* perproc | X | X | 1 633* puls1 | X | X | 1 634* puls2 | X | X | 1 635* push | X | X | 1 636* qlr | X | X | 1 637* qls | X | X | 1 638* qrl | X | X | 1 639* qrs | X | X | 1 640* rccl | X | X | 1 641* rcu | X | X | 1 642* rem | X | X | 1 643* ret | X | X | 1 644* return | X | X | 1 645* rimr | | X | 1 646* rmcm | X | | 1 647* rpd | X | X | 1 648* rpda | X | X | 1 649* rpdb | X | X | 1 650* rpdx | X | X | 1 651* rpl | X | X | 1 652* rplx | X | X | 1 653* rpt | X | X | 1 654* rptx | X | X | 1 655* rres | | X | 1 656* rscr | X | | 1 657* rsw | X | | 1 658* rtcd | X | X | 1 659* s4bd | X | X | 1 660* s4bdx | X | X | 1 661* s6bd | X | X | 1 662* s6bdx | X | X | 1 663* s9bd | X | X | 1 664* s9bdx | X | X | 1 665* sar | X | X | 1 666* sar0 | X | X | 1 667* sar1 | X | X | 1 668* sar2 | X | X | 1 669* sar3 | X | X | 1 670* sar4 | X | X | 1 671* sar5 | X | X | 1 672* sar6 | X | X | 1 673* sar7 | X | X | 1 674* sarab | X | X | 1 675* sarap | X | X | 1 676* sarbb | X | X | 1 677* sarbp | X | X | 1 678* sareg | X | X | 1 679* sarlb | X | X | 1 680* sarlp | X | X | 1 681* sarsb | X | X | 1 682* sarsp | X | X | 1 683* save | X | X | 1 684* sb2d | X | X | 1 685* sb2dx | | X | 1 686* sb3d | X | X | 1 687* sb3dx | | X | 1 688* sba | X | X | 1 689* sbaq | X | X | 1 690* sbar | X | X | 1 691* sbd | X | X | 1 692* sbdx | X | X | 1 693* sbla | X | X | 1 694* sblaq | X | X | 1 695* sblq | X | X | 1 696* sblx | X | X | 1 697* sblx0 | X | X | 1 698* sblx1 | X | X | 1 699* sblx2 | X | X | 1 700* sblx3 | X | X | 1 701* sblx4 | X | X | 1 702* sblx5 | X | X | 1 703* sblx6 | X | X | 1 704* sblx7 | X | X | 1 705* sbq | X | X | 1 706* sbx | X | X | 1 707* sbx0 | X | X | 1 708* sbx1 | X | X | 1 709* sbx2 | X | X | 1 710* sbx3 | X | X | 1 711* sbx4 | X | X | 1 712* sbx5 | X | X | 1 713* sbx6 | X | X | 1 714* sbx7 | X | X | 1 715* scd | X | X | 1 716* scdr | X | X | 1 717* scm | X | X | 1 718* scmr | X | X | 1 719* scpr | X | | 1 720* scu | X | X | 1 721* sdbr | X | X | 1 722* segdef | X | X | 1 723* segref | X | X | 1 724* set | X | X | 1 725* setlp | X | X | 1 726* sfr | | X | 1 727* short_ca | X | X | 1 728* short_re | X | X | 1 729* sixtyfou | X | X | 1 730* smcm | X | | 1 731* smic | X | | 1 732* source | X | X | 1 733* spbp | X | X | 1 734* spbp0 | X | X | 1 735* spbp1 | X | X | 1 736* spbp2 | X | X | 1 737* spbp3 | X | X | 1 738* spbp4 | X | X | 1 739* spbp5 | X | X | 1 740* spbp6 | X | X | 1 741* spbp7 | X | X | 1 742* spbpab | X | X | 1 743* spbpap | X | X | 1 744* spbpbb | X | X | 1 745* spbpbp | X | X | 1 746* spbplb | X | X | 1 747* spbplp | X | X | 1 748* spbpsb | X | X | 1 749* spbpsp | X | X | 1 750* spl | X | X | 1 751* spri | X | X | 1 752* spri0 | X | X | 1 753* spri1 | X | X | 1 754* spri2 | X | X | 1 755* spri3 | X | X | 1 756* spri4 | X | X | 1 757* spri5 | X | X | 1 758* spri6 | X | X | 1 759* spri7 | X | X | 1 760* spriab | X | X | 1 761* spriap | X | X | 1 762* spribb | X | X | 1 763* spribp | X | X | 1 764* sprilb | X | X | 1 765* sprilp | X | X | 1 766* sprisb | X | X | 1 767* sprisp | X | X | 1 768* sprp | X | X | 1 769* sprp0 | X | X | 1 770* sprp1 | X | X | 1 771* sprp2 | X | X | 1 772* sprp3 | X | X | 1 773* sprp4 | X | X | 1 774* sprp5 | X | X | 1 775* sprp6 | X | X | 1 776* sprp7 | X | X | 1 777* sprpab | X | X | 1 778* sprpap | X | X | 1 779* sprpbb | X | X | 1 780* sprpbp | X | X | 1 781* sprplb | X | X | 1 782* sprplp | X | X | 1 783* sprpsb | X | X | 1 784* sprpsp | X | X | 1 785* sptp | X | | 1 786* sptr | X | | 1 787* sra | X | X | 1 788* sreg | X | X | 1 789* ssa | X | X | 1 790* sscr | X | | 1 791* ssdp | X | | 1 792* ssdr | X | | 1 793* ssq | X | X | 1 794* ssx | X | X | 1 795* ssx0 | X | X | 1 796* ssx1 | X | X | 1 797* ssx2 | X | X | 1 798* ssx3 | X | X | 1 799* ssx4 | X | X | 1 800* ssx5 | X | X | 1 801* ssx6 | X | X | 1 802* ssx7 | X | X | 1 803* sta | X | X | 1 804* stac | X | X | 1 805* stacq | X | X | 1 806* staq | X | X | 1 807* statemen | X | X | 1 808* stba | X | X | 1 809* stbq | X | X | 1 810* stc1 | X | X | 1 811* stc2 | X | X | 1 812* stca | X | X | 1 813* stcd | X | X | 1 814* stcq | X | X | 1 815* ste | X | X | 1 816* sti | X | X | 1 817* sto | | X | 1 818* stq | X | X | 1 819* structur | X | X | 1 820* stt | X | X | 1 821* stta | | X | 1 822* stx | X | X | 1 823* stx0 | X | X | 1 824* stx1 | X | X | 1 825* stx2 | X | X | 1 826* stx3 | X | X | 1 827* stx4 | X | X | 1 828* stx5 | X | X | 1 829* stx6 | X | X | 1 830* stx7 | X | X | 1 831* stz | X | X | 1 832* swca | X | X | 1 833* swcq | X | X | 1 834* swd | X | X | 1 835* swdx | X | X | 1 836* sxl | X | X | 1 837* sxl0 | X | X | 1 838* sxl1 | X | X | 1 839* sxl2 | X | X | 1 840* sxl3 | X | X | 1 841* sxl4 | X | X | 1 842* sxl5 | X | X | 1 843* sxl6 | X | X | 1 844* sxl7 | X | X | 1 845* symbol | X | X | 1 846* sync | | X | 1 847* szn | X | X | 1 848* sznc | X | X | 1 849* sztl | X | X | 1 850* sztr | X | X | 1 851* tct | X | X | 1 852* tctr | X | X | 1 853* temp | X | X | 1 854* temp8 | X | X | 1 855* tempd | X | X | 1 856* teo | X | X | 1 857* teu | X | X | 1 858* tmi | X | X | 1 859* tmoz | X | X | 1 860* tnc | X | X | 1 861* tnz | X | X | 1 862* tov | X | X | 1 863* tpl | X | X | 1 864* tpnz | X | X | 1 865* tra | X | X | 1 866* trc | X | X | 1 867* trtf | X | X | 1 868* trtn | X | X | 1 869* tsp | X | X | 1 870* tsp0 | X | X | 1 871* tsp1 | X | X | 1 872* tsp2 | X | X | 1 873* tsp3 | X | X | 1 874* tsp4 | X | X | 1 875* tsp5 | X | X | 1 876* tsp6 | X | X | 1 877* tsp7 | X | X | 1 878* tspab | X | X | 1 879* tspap | X | X | 1 880* tspbb | X | X | 1 881* tspbp | X | X | 1 882* tsplb | X | X | 1 883* tsplp | X | X | 1 884* tspsb | X | X | 1 885* tspsp | X | X | 1 886* tss | X | X | 1 887* tsx | X | X | 1 888* tsx0 | X | X | 1 889* tsx1 | X | X | 1 890* tsx2 | X | X | 1 891* tsx3 | X | X | 1 892* tsx4 | X | X | 1 893* tsx5 | X | X | 1 894* tsx6 | X | X | 1 895* tsx7 | X | X | 1 896* ttes | | X | 1 897* ttez | | X | 1 898* ttf | X | X | 1 899* ttn | X | X | 1 900* tttl | | X | 1 901* tttu | | X | 1 902* tze | X | X | 1 903* ufa | X | X | 1 904* ufm | X | X | 1 905* ufs | X | X | 1 906* union | X | X | 1 907* use | X | X | 1 908* vfd | X | X | 1 909* xec | X | X | 1 910* xed | X | X | 1 911* zero | X | X | 1 912* */ 1 913 1 914 /* End of include file DECOR_TABLE.incl.pl1 */ 130 131 132 133 134 /* LOCAL ERROR HANDLER */ 135 on local_error goto return_point; 136 137 /* IN CASE OF INTERUPT */ 138 on cleanup call clean_up; 139 140 /* GET TABLE AND DEFOP SEG PTRS */ 141 call cu_$arg_count(arg_no); 142 if arg_no ^=2 143 then do; 144 call com_err_$suppress_name(0,this_pgm,"Usage: alm_table_tool table_seg_path defops_seg_path"); 145 return; 146 end; 147 148 call cu_$arg_ptr(1,arg1p,arg1l,code); 149 if code ^=0 | arg1 = "" 150 then do; 151 call com_err_(error_table_$noarg,this_pgm); 152 return; 153 end; 154 155 call cu_$arg_ptr(2,arg2p,arg2l,code); 156 if code ^=0 157 then do; 158 call com_err_(code,this_pgm,"while in cu_$arg_ptr"); 159 return; 160 end; 161 162 call expand_pathname_(arg1,dir_name,entry_name,code); 163 if code ^=0 164 then do; 165 call com_err_(code,this_pgm,arg1,"while in expand_pathname_"); 166 return; 167 end; 168 169 call hcs_$initiate_count(dir_name,entry_name,"",bit_ct,0,table_ptr,code); 170 if table_ptr = null 171 then do; 172 call com_err_(code,this_pgm,"while in hsc_$initiate_count"); 173 return; 174 end; 175 176 table_length = divide(bit_ct+8,9,24,0); 177 178 call expand_pathname_(arg2,dir_name,entry_name,code); 179 if code ^=0 180 then do; 181 call com_err_(code,this_pgm,arg2); 182 return; 183 end; 184 185 call hcs_$initiate_count(dir_name,entry_name,"",bit_ct,0,defops_ptr,code); 186 if defops_ptr = null 187 then do; 188 call com_err_(code,this_pgm,"while in hcs_$initiate_count"); 189 end; 190 191 defops_length = divide(bit_ct+8,9,24,0); 192 193 194 /* COLLECT DECOR NAMES and INITIALIZE VARIABLES */ 195 196 call get_first_symbol(table,cursor,current_symbol); 197 if substr(current_symbol,1,2) ^= "/*" 198 then do; 199 call com_err_(0,this_pgm,"First symbol must be pl1 comment."); 200 signal local_error; 201 end; 202 if length(current_symbol) > 2 203 then current_symbol = substr(current_symbol,3); 204 else call get_next_symbol(table,cursor,current_symbol); 205 206 /* Skip over comments that don't begin with "names:" or "NAMES:" */ 207 do while(current_symbol ^= "NAMES:" & current_symbol ^= "names:" & current_symbol ^= ""); 208 do while(current_symbol ^= "*/" & current_symbol ^= " "); 209 call get_next_symbol(table,cursor,current_symbol); 210 end; 211 if current_symbol = "*/" then do; 212 call get_next_symbol(table, cursor, current_symbol); 213 if substr(current_symbol, 1, 2) ^= "/*" then do; 214 call com_err_(0,this_pgm,"First symbol must be pl1 comment."); 215 signal local_error; 216 end; 217 if length(current_symbol) > 2 then current_symbol = substr(current_symbol, 3); 218 else call get_next_symbol(table,cursor,current_symbol); 219 end; 220 end; 221 222 if current_symbol ^="NAMES:" & current_symbol ^= "names:" 223 then do; 224 call com_err_(0,this_pgm,"First non-comment symbol of DECOR_TABLE.incl must be ""NAMES:"""); 225 signal local_error; 226 end; 227 228 229 do n = 1 to hbound(temp_array,1); 230 temp_array(n).ptr = null; 231 end; 232 n = 0; 233 234 call get_next_symbol(table,cursor,current_symbol); 235 do while(current_symbol ^= "TABLE:" & current_symbol ^= "table:"); 236 n = n + 1; 237 if n > hbound(temp_array,1) 238 then do; 239 call com_err_(0,this_pgm,"Number of dummy names supplied excedes current maximum of ^d.",hbound(temp_array,1)); 240 signal local_error; 241 end; 242 temp_array(n).name = substr(current_symbol,1,length(current_symbol)-1); 243 call get_next_symbol(table,cursor,current_symbol); 244 245 end_of_synonyms = "0"b; 246 do while(^end_of_synonyms); 247 ptr_saver = temp_array(n).ptr; 248 allocate chain_node in(chain_space) set(temp_array(n).ptr); 249 temp_array(n).ptr -> chain_node.next = ptr_saver; 250 temp_array(n).ptr -> chain_node.name = current_symbol; 251 if index(temp_array(n).ptr -> chain_node.name,";")^=0 252 then do; 253 temp_array(n).ptr -> chain_node.name = substr(temp_array(n).ptr -> chain_node.name,1,length(temp_array(n).ptr -> chain_node.name)-1); 254 end_of_synonyms = "1"b; 255 end; 256 call get_next_symbol(table,cursor,current_symbol); 257 if current_symbol = ";" 258 then do; 259 end_of_synonyms = "1"b; 260 call get_next_symbol(table,cursor,current_symbol); 261 end; 262 end; 263 264 end; 265 266 267 268 call get_next_symbol(table,cursor,current_symbol); /* get symbol after 269*"TABLE:" */ 270 table_position = cursor; /* save table position */ 271 line = current_line(table,cursor); 272 call get_first_symbol((line),cursor,current_symbol); /* resets cursor relative to top line of table */ 273 table_position = table_position - cursor; /* so table_position equals beginning of line */ 274 if current_symbol ^= "|" 275 then do; 276 call com_err_(0,this_pgm,"""|"" must be first character in table."); 277 signal local_error; 278 end; 279 call get_next_symbol((line),cursor,current_symbol); 280 281 282 /* COUNT DECORS FORM COLUMN HEADINGS AND COORDINATE WITH NAMES */ 283 284 /* initialize */ 285 DEC_no = 0; 286 m = 0; 287 288 do while(current_symbol ^= ""); 289 DEC_no = DEC_no + 1; 290 291 /* chase chain */ 292 293 do n= 1 to hbound(temp_array,1) while(current_symbol ^= temp_array(n).name); 294 end; 295 if current_symbol ^= temp_array(n).name 296 then do; 297 call com_err_(0,this_pgm,"""^a"" has not been defined in the NAMES section.",current_symbol); 298 signal local_error; 299 end; 300 temp_ptr = temp_array(n).ptr; 301 do while(temp_ptr ^= null); 302 m = m + 1; 303 allocate name_stack; 304 name_stack.name = temp_ptr -> chain_node.name; 305 name_stack.number = DEC_no; 306 temp_ptr = temp_ptr -> chain_node.next; 307 end; 308 309 call get_next_symbol((line),cursor,current_symbol); 310 if current_symbol ^= "|" 311 then do; 312 if current_symbol = "" 313 then message = "Top line of table must end with ""|"" delimiter"; 314 else message = "Some column in table is missing a ""|"" delimiter"; 315 call com_err_(0,this_pgm,message); 316 signal local_error; 317 end; 318 call get_next_symbol((line),cursor,current_symbol); 319 end; 320 321 /* CREATE ALM_DATA1 */ 322 323 begin; /* so alm_data1 can get the extents just computed */ 324 325 /* FORMAT OF ALM_DATA1 */ 326 /* changes to this fromat should be propogated to alm_data.incl.pl1 */ 327 328 dcl 1 alm_data1, 329 2 structure, 330 3 num_of_names fixed init(allocation(name_stack)), 331 3 decor_name (allocation(name_stack)), 332 4 name char(24) varying, 333 4 number fixed bin(35); 334 dcl (n,m) fixed; 335 336 m = allocation(name_stack); 337 do n = m to 1 by -1; 338 alm_data1.structure.decor_name(n).name = name_stack.name; 339 alm_data1.structure.decor_name(n).number = name_stack.number; 340 free name_stack; 341 end; 342 343 cds_argsA.sections(1).p = addr(alm_data1); 344 cds_argsA.sections(1).len = size(alm_data1); 345 cds_argsA.sections(1).struct_name = "alm_data1"; 346 cds_argsA.seg_name = "alm_data1"; 347 cds_argsA.num_exclude_names = 0; 348 cds_argsA.exclude_array_ptr = null; 349 cds_argsA.switches.defs_in_link = "0"b; 350 cds_argsA.switches.separate_static = "0"b; 351 cds_argsA.switches.have_text = "1"b; 352 cds_argsA.switches.have_static = "0"b; 353 cds_argsA.switches.pad = "0"b; 354 355 call create_data_segment_(addr(cds_argsA),code); 356 if code ^= 0 357 then do; 358 call com_err_(code,this_pgm,"while creating alm_data1"); 359 signal local_error; 360 end; 361 362 end; /* begin block */ 363 364 365 366 /* DIGEST TABLE INFO */ 367 368 array_size = 2**DEC_no; 369 cursor = cursor + table_position ; /* reset relative to table */ 370 371 372 /* skip stuff */ 373 call get_next_symbol(table,cursor,current_symbol); 374 if substr(current_symbol,1,5) ^= "-----" 375 then do; 376 call com_err_(0,this_pgm,"Expecting ""---..."", found ""^a"".^/ Current line is:^/^a",current_symbol,current_line(table,cursor)); 377 signal local_error; 378 end; 379 call get_next_symbol(table,cursor,current_symbol); 380 381 382 383 begin; 384 dcl bit_string bit(DEC_no*DEC_no*2) varying init(""b); 385 dcl class_array(0:array_size-1) bit(1) unaligned; 386 dcl bit_register(DEC_no) bit(1) unaligned; 387 dcl bit_register_overlay bit(DEC_no) defined bit_register; 388 389 /* PROCESS INSTRUCTIONS */ 390 class_array = "0"b; 391 do while(current_symbol ^= "*/"); 392 allocate instruction; 393 instruction.name = current_symbol; 394 last_symbol = current_symbol; 395 call get_next_symbol(table,cursor,current_symbol); 396 if current_symbol ^= "|" 397 then do; 398 call com_err_(0,this_pgm,"Instruction table is defective. Just processed ""^a"", expecting ""|"", found ""^a"".^/ Current line is:^/^a",last_symbol,current_symbol,current_line(table,cursor)); 399 signal local_error; 400 end; 401 slot_no = 0; 402 bit_register = "0"b; 403 do while(current_symbol = "|" ); 404 slot_no = slot_no + 1; 405 call get_next_symbol(table,cursor,current_symbol); 406 if current_symbol = "X" | current_symbol = "x" 407 then do; 408 bit_register(slot_no) = "1"b; 409 call get_next_symbol(table,cursor,current_symbol); 410 if current_symbol ^= "|" 411 then do; 412 call com_err_(0,this_pgm,"Instruction table is defective. Just processed ""X"", expecting ""|"", found ""^a"".^/ Current line is:^/^a",current_symbol,current_line(table,cursor)); 413 signal local_error; 414 end; 415 end; 416 end; 417 if slot_no ^= DEC_no + 1 418 then if slot_no < DEC_no + 1 419 then do; 420 call com_err_(0,this_pgm,"Unrecognized symbol ""^a"" in current line:^/^a^/ or previous line has too few columns.",current_symbol,current_line(table,cursor)); 421 signal local_error; 422 end; 423 else do; 424 call com_err_(0,this_pgm,"Too many columns in the line at or near this one:^/^a",current_line(table,cursor-3)); 425 signal local_error; 426 end; 427 instruction.number = binary(bit_register_overlay); 428 class_array(instruction.number) = "1"b; 429 end; 430 431 call get_next_symbol(table,cursor,current_symbol); 432 433 /* Skip over comments */ 434 do while(substr(current_symbol, 1, 2) = "/*"); 435 if length(current_symbol) > 2 then current_symbol = substr(current_symbol, 3); 436 else call get_next_symbol(table,cursor,current_symbol); 437 do while(current_symbol ^= "*/"); 438 call get_next_symbol(table,cursor,current_symbol); 439 if current_symbol = "" then do; 440 call com_err_(0,this_pgm,"DECOR_TABLE.incl.pl1 end while in comment."); 441 signal local_error; 442 end; 443 end; 444 call get_next_symbol(table,cursor,current_symbol); 445 end; 446 447 if current_symbol ^= "" 448 then do; 449 call com_err_(0,this_pgm,"""^a"" was found at the end of DECOR_TABLE.incl, outside of the pl1-comment delimiters.",current_symbol); 450 signal local_error; 451 end; 452 453 454 455 /* COUNT NO OF DECOR CLASSES */ 456 457 no_of_classes = 0; 458 do n = 0 to array_size-1; 459 if class_array(n) 460 then no_of_classes = no_of_classes + 1; 461 if no_of_classes > current_max_of_classes 462 then do; 463 call com_err_(0,this_pgm,"Number of unique intersections of decors excedes current maximum of ^d.",current_max_of_classes); 464 signal local_error; 465 end; 466 end; 467 hash_no = closest_prime(no_of_classes); 468 469 470 begin; 471 dcl hash_table(0:hash_no) ptr; 472 dcl 1 hash_entry based(hash_entry_ptr), 473 2 instr_no fixed bin(17), 474 2 class_no fixed bin(17), 475 2 next ptr; 476 dcl hash_entry_ptr ptr; 477 478 /* FORMAT OF ALM_DATA2 */ 479 /* changes to this format should be propogated to alm_data.incl.pl1 */ 480 481 dcl 1 alm_data2, 482 2 structure, 483 3 num_of_classes_less_1 fixed init(no_of_classes-1), 484 3 num_of_decors fixed init(DEC_no), 485 3 compatible (0:no_of_classes-1) bit(DEC_no); 486 487 /* BUILD HASH TABLE */ 488 hash_table = null; 489 clsnum = -1; /* clsnum is incremented before it is used; the first class no. will be 0 */ 490 491 492 do n = 0 to array_size-1; 493 if class_array(n) /* if there is such a class */ 494 then do; 495 clsnum = clsnum + 1; 496 497 hash_index = mod(n,hash_no); 498 if hash_table(hash_index) = null 499 then do; /* create and link new entry */ 500 allocate hash_entry; 501 hash_table(hash_index) = hash_entry_ptr; 502 end; 503 else do; /* go to the end and create new entry */ 504 ptr1 = hash_table(hash_index); 505 do while(ptr1 -> hash_entry.next ^= null); 506 ptr1 = ptr1 -> hash_entry.next; 507 end; 508 allocate hash_entry; 509 ptr1 -> hash_entry.next = hash_entry_ptr; 510 end; 511 /* put_info_in_new_entry */ 512 hash_entry.instr_no = n; 513 hash_entry.class_no = clsnum; 514 hash_entry.next = null; 515 516 /* fill in alm_data2's rows */ 517 alm_data2.structure.compatible(clsnum) = substr(bit(n,17),17 - DEC_no + 1); 518 end; 519 end; 520 521 522 523 /* WRITE ALM_DATA2 */ 524 525 cds_argsA.sections(1).p = addr(alm_data2); 526 cds_argsA.sections(1).len = size(alm_data2); 527 cds_argsA.sections(1).struct_name = "alm_data2"; 528 cds_argsA.seg_name = "alm_data2"; 529 cds_argsA.num_exclude_names = 0; 530 cds_argsA.exclude_array_ptr = null; 531 cds_argsA.switches.defs_in_link = "0"b; 532 cds_argsA.switches.separate_static = "0"b; 533 cds_argsA.switches.have_text = "1"b; 534 cds_argsA.switches.have_static = "0"b; 535 cds_argsA.switches.pad = "0"b; 536 537 call create_data_segment_(addr(cds_argsA),code); 538 if code ^= 0 539 then do; 540 call com_err_(code,this_pgm,"while creating alm_data2"); 541 signal local_error; 542 end; 543 544 545 546 /* TRANSLATE INSTRUCTION NO'S TO DECOR CLASS NO'S */ 547 do while(allocation(instruction) ^=0); 548 allocate instruction2; 549 instruction2 = instruction; 550 free instruction; 551 hash_index = mod(instruction2.number ,hash_no); 552 ptr1 = hash_table(hash_index); 553 do while(ptr1 -> hash_entry.instr_no ^= instruction2.number); 554 ptr1 = ptr1 -> hash_entry.next; 555 end; 556 instruction2.number = ptr1 -> hash_entry.class_no; 557 end; 558 559 end; /* begin block */ 560 561 562 /* PUT DECOR CLASS NO's IN DEFOPS */ 563 working_dir = get_wdir_(); 564 call hcs_$make_seg(working_dir,"defops.incl.alm","",10,dont_care,code); 565 if code ^= 0 566 then do; 567 call com_err_(code,this_pgm,"while trying to write defops.incl.alm"); 568 signal local_error; 569 end; 570 571 open file(defops_incl_alm) title("vfile_ "||rtrim(working_dir)||">defops.incl.alm") output; 572 573 call get_first_symbol(defops,cursor,current_symbol); 574 575 /* Skip over leading comments */ 576 do while(current_symbol ^= "" & substr(current_symbol, 1, 1) = """"); 577 comment_length = index(substr(defops, cursor), new_line) - 1; 578 if comment_length = 0 then comment_length = defops_length - cursor + 1; 579 put file(defops_incl_alm) skip edit(substr(defops, cursor, comment_length)) (a); 580 cursor = cursor + comment_length; 581 call get_next_symbol(defops,cursor,current_symbol); 582 end; 583 584 macro_line = current_symbol||" "; 585 do while(current_symbol ^=""); 586 if allocation(instruction2) = 0 587 then do; 588 call com_err_(0,this_pgm,"There are more defops than entries in the table."); 589 signal local_error; 590 end; 591 call get_next_symbol(defops,cursor,current_symbol); 592 if index(current_symbol,instruction2.name) ^=1 593 then do; 594 call com_err_(0,this_pgm,"Defop and table entries don't match.^/ Current defop entry is ""^a"".^/ Current table entry is ""^a"".",current_symbol,instruction2.name); 595 signal local_error; 596 end; 597 begin; 598 dcl significance fixed bin(17), 599 char_num char(2) varying, 600 last_comma fixed bin(17), 601 untouched_part char(100) varying; 602 significance = verify(char(instruction2.number)," "); 603 char_num = substr(char(instruction2.number),significance); 604 last_comma = search(reverse(current_symbol),",") - 1; 605 untouched_part = substr(current_symbol,1,length(current_symbol) - last_comma); 606 macro_line = macro_line||untouched_part||char_num; 607 put file(defops_incl_alm) skip edit(macro_line) (x(10),a); 608 end; 609 free instruction2; 610 call get_next_symbol(defops,cursor,current_symbol); 611 612 /* Skip over comments */ 613 do while(current_symbol ^= "" & substr(current_symbol, 1, 1) = """"); 614 comment_length = index(substr(defops, cursor), new_line) - 1; 615 if comment_length = 0 then comment_length = defops_length - cursor + 1; 616 put file(defops_incl_alm) skip edit(substr(defops, cursor, comment_length)) (a); 617 cursor = cursor + comment_length; 618 call get_next_symbol(defops,cursor,current_symbol); 619 end; 620 621 macro_line = current_symbol||" "; 622 end; 623 624 put file(defops_incl_alm) skip; 625 close file(defops_incl_alm); 626 627 628 629 end; /* of begin block */ 630 631 return_point: call clean_up; 632 633 634 635 /* SUBROUTINES */ 636 637 closest_prime: proc(n) returns(fixed bin(17)); 638 dcl n fixed bin(17); 639 return(n); 640 end closest_prime; 641 642 get_first_symbol: proc(text,cursor,ret_arg); 643 dcl text char(*) , 644 ret_arg char(*) varying, 645 cursor fixed bin(35), 646 extent fixed bin(35); 647 cursor = verify(text,white_space); 648 if cursor = 0 649 then ret_arg = ""; 650 else do; 651 extent = search(substr(text,cursor),white_space)-1; 652 if extent = -1 653 then ret_arg = substr(text,cursor); 654 else ret_arg = substr(text,cursor,extent); 655 end; 656 end get_first_symbol; 657 658 get_next_symbol: proc(text,cursor,symbol); 659 dcl text char(*) , 660 symbol char(*) varying, 661 cursor fixed bin(35), 662 extent fixed bin(35), 663 (temp_ptr,temp_ptr2) fixed bin(35); 664 extent = search(substr(text,cursor),white_space); 665 if extent =0 666 then symbol = ""; 667 else do; 668 temp_ptr = cursor + extent - 1; 669 temp_ptr2 = verify(substr(text,temp_ptr),white_space); 670 if temp_ptr2 = 0 671 then symbol = ""; 672 else do; 673 cursor = temp_ptr + temp_ptr2 - 1; 674 extent = search(substr(text,cursor),white_space) - 1; 675 if extent = -1 676 then symbol = substr(text,cursor); 677 else symbol = substr(text,cursor,extent); 678 end; 679 end; 680 end get_next_symbol; 681 682 current_line:proc(text,cursor) returns(char(300) varying); 683 dcl text char(*) , 684 cursor fixed bin(35); 685 dcl (n,new_cursor,extent) fixed bin(35); 686 687 n = index(reverse(substr(text,1,cursor)),new_line); 688 if n=0 689 then new_cursor = 1; /* this is the first line */ 690 else new_cursor = cursor - n +2; 691 extent = index(substr(text,new_cursor),new_line); 692 if extent = 0 693 then return( substr(text,new_cursor) ); /* last line */ 694 else return( substr(text,new_cursor,extent) ); 695 end current_line; 696 697 698 699 700 clean_up: proc; 701 do while(allocation(instruction) ^=0); 702 free instruction; 703 end; 704 do while(allocation(instruction2) ^=0); 705 free instruction2; 706 end; 707 do while(allocation(name_stack)^=0); 708 free name_stack; 709 end; 710 close file(defops_incl_alm); 711 end clean_up; 712 713 714 715 /* DECLARATIONS */ 716 717 dcl (arg1l,arg2l) fixed bin(21), 718 (arg1p,arg2p,table_ptr,defops_ptr) pointer, 719 code fixed bin(35), 720 arg1 char(arg1l) based(arg1p), 721 arg2 char(arg2l) based(arg2p), 722 table char(table_length) based(table_ptr), 723 defops char(defops_length) based(defops_ptr), 724 bit_ct fixed bin(24), 725 dir_name char(168), 726 entry_name char(32), 727 arg_no fixed bin, 728 null builtin, 729 this_pgm char(14) init("alm_table_tool"), 730 error_table_$noarg fixed bin(35) ext static, 731 cu_$arg_ptr entry (fixed bin,ptr,fixed bin(21),fixed bin(35)), 732 com_err_ entry() options(variable), 733 com_err_$suppress_name entry() options(variable), 734 cu_$arg_count entry(fixed bin), 735 hcs_$initiate_count entry(char(*),char(*),char(*),fixed bin(24),fixed bin(2),ptr,fixed bin(35)), 736 expand_pathname_ entry (char(*),char(*),char(*),fixed bin(35)), 737 cursor fixed bin(35), 738 DEC_no fixed bin(17), 739 current_symbol char(200) varying; 740 dcl 1 instruction controlled, 741 2 name char(10) varying, 742 2 number fixed bin(17); 743 dcl 1 instruction2 controlled, 744 2 name char(10) varying, 745 2 number fixed bin(17); 746 dcl (slot_no,no_of_classes,clsnum,hash_no) fixed bin(17); 747 748 dcl local_error condition; 749 dcl white_space char(5) init(" 750 "); 751 dcl ptr1 ptr, 752 table_length fixed bin(23), 753 defops_length fixed bin(23), 754 array_size fixed bin(17), 755 last_symbol char(200) varying, 756 n fixed bin(17), 757 hash_index fixed bin(17), 758 table_position fixed bin(17), 759 macro_line char(100) varying, 760 declaration char(200) varying, 761 length_of_pseudop fixed bin (17) internal static init(8) options(constant), 762 decor_name(16) char(length_of_pseudop) varying, 763 message char(100) varying, 764 line char(300) varying; 765 dcl 1 temp_array(100), 766 2 name char(24) varying, 767 2 ptr ptr; 768 769 dcl 1 chain_node based, 770 2 name char(24) varying, 771 2 next ptr; 772 773 dcl 1 name_stack controlled, 774 2 name char(24) varying, 775 2 number fixed bin(35); 776 777 dcl comment_length fixed bin; 778 dcl new_line char(1) int static options(constant) init(" 779 "); 780 dcl current_max_of_classes fixed internal static options(constant) init(16); 781 dcl working_dir char(168) ; 782 dcl get_wdir_ entry returns(char(168)); 783 dcl hcs_$make_seg entry (char(*),char(*),char(*),fixed bin(5),ptr, fixed bin(35)); 784 dcl create_data_segment_ entry (ptr, fixed bin(35)); 785 dcl dont_care ptr; 786 dcl chain_space area(1024); 787 dcl end_of_synonyms bit(1); 788 dcl (temp_ptr,ptr_saver) ptr; 789 dcl (m,j) fixed bin; 790 dcl (addr,allocation,binary,bit,char,divide,empty,hbound,index,length, 791 mod,reverse,rtrim,search,size,substr,verify) builtin; 792 793 /* BEGIN INCLUDE FILE cds_args.incl.pl1 */ 2 2 2 3 dcl 1 cds_args based aligned, 2 4 2 sections (2), 2 5 3 p ptr, /* pointer to data for text/static section */ 2 6 3 len fixed bin (18), /* size of text/static section */ 2 7 3 struct_name char (32), /* name of declared structure for this section */ 2 8 2 seg_name char (32), /* name to create segment by */ 2 9 2 num_exclude_names fixed bin, /* number of names in exclude array */ 2 10 2 exclude_array_ptr ptr, /* pointer to array of exclude names */ 2 11 2 switches, /* control switches */ 2 12 3 defs_in_link bit (1) unal, /* says put defs in linkage */ 2 13 3 separate_static bit (1) unal, /* says separate static section is wanted */ 2 14 3 have_text bit (1) unal, /* ON if text section given */ 2 15 3 have_static bit (1) unal, /* ON if static section given */ 2 16 3 pad bit (32) unal; 2 17 2 18 dcl exclude_names (1) char (32) based; /* pointed to be cds_args.exclude_array_ptr */ 2 19 2 20 /* END INCLUDE FILE cds_args.incl.pl1 */ 793 794 dcl 1 cds_argsA like cds_args; 795 dcl cleanup condition; 796 dcl defops_incl_alm file; 797 end alm_table_tool; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 10/17/88 0929.4 alm_table_tool.pl1 >spec>install>1170>alm_table_tool.pl1 130 1 10/17/88 1012.8 DECOR_TABLE.incl.pl1 >spec>install>1170>DECOR_TABLE.incl.pl1 793 2 04/01/76 2209.5 cds_args.incl.pl1 >ldd>include>cds_args.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. DEC_no 000204 automatic fixed bin(17,0) dcl 717 set ref 285* 289* 289 305 368 384 384 386 387 417 417 481 481 481 481 517 517 517 526 addr builtin function dcl 790 ref 343 355 355 525 537 537 allocation builtin function dcl 790 ref 328 328 336 547 586 701 704 707 alm_data1 000100 automatic structure level 1 unaligned dcl 328 set ref 343 344 alm_data2 000102 automatic structure level 1 unaligned dcl 481 set ref 525 526 arg1 based char packed unaligned dcl 717 set ref 149 162* 165* arg1l 000100 automatic fixed bin(21,0) dcl 717 set ref 148* 149 162 162 165 165 717 arg1p 000102 automatic pointer dcl 717 set ref 148* 149 162 165 717 arg2 based char packed unaligned dcl 717 set ref 178* 181* arg2l 000101 automatic fixed bin(21,0) dcl 717 set ref 155* 178 178 181 181 717 arg2p 000104 automatic pointer dcl 717 set ref 155* 178 181 717 arg_no 000176 automatic fixed bin(17,0) dcl 717 set ref 141* 142 array_size 000310 automatic fixed bin(17,0) dcl 751 set ref 368* 385 458 492 binary builtin function dcl 790 ref 427 bit builtin function dcl 790 ref 517 bit_ct 000113 automatic fixed bin(24,0) dcl 717 set ref 169* 176 185* 191 bit_register 000100 automatic bit(1) array packed unaligned dcl 386 set ref 387 387 402* 408* 427 427 bit_register_overlay defined bit packed unaligned dcl 387 ref 427 bit_string 000100 automatic varying bit initial dcl 384 set ref 384* cds_args based structure level 1 dcl 2-3 cds_argsA 005000 automatic structure level 1 unaligned dcl 794 set ref 355 355 537 537 chain_node based structure level 1 unaligned dcl 769 set ref 248 chain_space 002770 automatic area(1024) dcl 786 set ref 248 786* char builtin function dcl 790 ref 602 603 char_num 000102 automatic varying char(2) dcl 598 set ref 603* 606 class_array 000100 automatic bit(1) array packed unaligned dcl 385 set ref 390* 428* 459 493 class_no 1 based fixed bin(17,0) level 2 dcl 472 set ref 513* 556 cleanup 005046 stack reference condition dcl 795 ref 138 clsnum 000272 automatic fixed bin(17,0) dcl 746 set ref 489* 495* 495 513 517 code 000112 automatic fixed bin(35,0) dcl 717 set ref 148* 149 155* 156 158* 162* 163 165* 169* 172* 178* 179 181* 185* 188* 355* 356 358* 537* 538 540* 564* 565 567* com_err_ 000044 constant entry external dcl 717 ref 151 158 165 172 181 188 199 214 224 239 276 297 315 358 376 398 412 420 424 440 449 463 540 567 588 594 com_err_$suppress_name 000046 constant entry external dcl 717 ref 144 comment_length 002712 automatic fixed bin(17,0) dcl 777 set ref 577* 578 578* 579 580 614* 615 615* 616 617 compatible 2 000102 automatic bit array level 3 packed packed unaligned dcl 481 set ref 517* create_data_segment_ 000062 constant entry external dcl 784 ref 355 537 cu_$arg_count 000050 constant entry external dcl 717 ref 141 cu_$arg_ptr 000042 constant entry external dcl 717 ref 148 155 current_max_of_classes 000010 constant fixed bin(17,0) initial dcl 780 set ref 461 463* current_symbol 000205 automatic varying char(200) dcl 717 set ref 196* 197 202 202* 202 204* 207 207 207 208 208 209* 211 212* 213 217 217* 217 218* 222 222 234* 235 235 242 242 243* 250 256* 257 260* 268* 272* 274 279* 288 293 295 297* 309* 310 312 318* 373* 374 376* 379* 391 393 394 395* 396 398* 403 405* 406 406 409* 410 412* 420* 431* 434 435 435* 435 436* 437 438* 439 444* 447 449* 573* 576 576 581* 584 585 591* 592 594* 604 605 605 610* 613 613 618* 621 cursor parameter fixed bin(35,0) dcl 659 in procedure "get_next_symbol" set ref 658 664 668 673* 674 675 677 cursor parameter fixed bin(35,0) dcl 643 in procedure "get_first_symbol" set ref 642 647* 648 651 652 654 cursor 000203 automatic fixed bin(35,0) dcl 717 in procedure "alm_table_tool" set ref 196* 204* 209* 212* 218* 234* 243* 256* 260* 268* 270 271* 272* 273 279* 309* 318* 369* 369 373* 376* 379* 395* 398* 405* 409* 412* 420* 424 431* 436* 438* 444* 573* 577 578 579 580* 580 581* 591* 610* 614 615 616 617* 617 618* cursor parameter fixed bin(35,0) dcl 683 in procedure "current_line" ref 682 687 690 decor_name 1 000100 automatic structure array level 3 unaligned dcl 328 defops based char packed unaligned dcl 717 set ref 573* 577 579 581* 591* 610* 614 616 618* defops_incl_alm 000064 constant file dcl 796 set ref 571 579 607 616 624 625 710 defops_length 000307 automatic fixed bin(23,0) dcl 751 set ref 191* 573 573 577 578 579 581 581 591 591 610 610 614 615 616 618 618 717 defops_ptr 000110 automatic pointer dcl 717 set ref 185* 186 573 577 579 581 591 610 614 616 618 717 defs_in_link 44 005000 automatic bit(1) level 3 packed packed unaligned dcl 794 set ref 349* 531* dir_name 000114 automatic char(168) packed unaligned dcl 717 set ref 162* 169* 178* 185* divide builtin function dcl 790 ref 176 191 dont_care 002766 automatic pointer dcl 785 set ref 564* empty builtin function dcl 790 ref 786 end_of_synonyms 004770 automatic bit(1) packed unaligned dcl 787 set ref 245* 246 254* 259* entry_name 000166 automatic char(32) packed unaligned dcl 717 set ref 162* 169* 178* 185* error_table_$noarg 000040 external static fixed bin(35,0) dcl 717 set ref 151* exclude_array_ptr 42 005000 automatic pointer level 2 dcl 794 set ref 348* 530* expand_pathname_ 000054 constant entry external dcl 717 ref 162 178 extent 000100 automatic fixed bin(35,0) dcl 659 in procedure "get_next_symbol" set ref 664* 665 668 674* 675 677 extent 000100 automatic fixed bin(35,0) dcl 643 in procedure "get_first_symbol" set ref 651* 652 654 extent 000102 automatic fixed bin(35,0) dcl 685 in procedure "current_line" set ref 691* 692 694 get_wdir_ 000056 constant entry external dcl 782 ref 563 hash_entry based structure level 1 unaligned dcl 472 set ref 500 508 hash_entry_ptr 000100 automatic pointer dcl 476 set ref 472 472 472 472 500* 501 508* 509 512 513 514 hash_index 000375 automatic fixed bin(17,0) dcl 751 set ref 497* 498 501 504 551* 552 hash_no 000273 automatic fixed bin(17,0) dcl 746 set ref 467* 471 497 551 hash_table 000100 automatic pointer array dcl 471 set ref 488* 498 501* 504 552 have_static 44(03) 005000 automatic bit(1) level 3 packed packed unaligned dcl 794 set ref 352* 534* have_text 44(02) 005000 automatic bit(1) level 3 packed packed unaligned dcl 794 set ref 351* 533* hbound builtin function dcl 790 ref 229 237 239 239 293 hcs_$initiate_count 000052 constant entry external dcl 717 ref 169 185 hcs_$make_seg 000060 constant entry external dcl 783 ref 564 index builtin function dcl 790 ref 251 577 592 614 687 691 instr_no based fixed bin(17,0) level 2 dcl 472 set ref 512* 553 instruction internal ctl structure level 1 unaligned dcl 740 set ref 392 547 549 550 701 702 instruction2 internal ctl structure level 1 unaligned dcl 743 set ref 548 549* 586 609 704 705 last_comma 000104 automatic fixed bin(17,0) dcl 598 set ref 604* 605 last_symbol 000311 automatic varying char(200) dcl 751 set ref 394* 398* len 2 005000 automatic fixed bin(18,0) array level 3 dcl 794 set ref 344* 526* length builtin function dcl 790 ref 202 217 242 253 435 605 length_of_pseudop 007323 constant fixed bin(17,0) initial dcl 751 ref 751 line 000626 automatic varying char(300) dcl 751 set ref 271* 272 279 309 318 local_error 000274 stack reference condition dcl 748 ref 135 200 215 225 240 277 298 316 359 377 399 413 421 425 441 450 464 541 568 589 595 m 000101 automatic fixed bin(17,0) dcl 334 in begin block on line 323 set ref 336* 337 m 004776 automatic fixed bin(17,0) dcl 789 in procedure "alm_table_tool" set ref 286* 302* 302 macro_line 000377 automatic varying char(100) dcl 751 set ref 584* 606* 606 607 621* message 000574 automatic varying char(100) dcl 751 set ref 312* 314* 315* mod builtin function dcl 790 ref 497 551 n parameter fixed bin(17,0) dcl 638 in procedure "closest_prime" ref 637 639 n 000100 automatic fixed bin(17,0) dcl 334 in begin block on line 323 set ref 337* 338 339* n 000374 automatic fixed bin(17,0) dcl 751 in procedure "alm_table_tool" set ref 229* 230* 232* 236* 236 237 242 247 248 249 250 251 253 253 253 293* 293* 295 300 458* 459* 492* 493 497 512 517* n 000100 automatic fixed bin(35,0) dcl 685 in procedure "current_line" set ref 687* 688 690 name 1 000100 automatic varying char(24) array level 4 in structure "alm_data1" dcl 328 in begin block on line 323 set ref 338* name internal ctl varying char(24) level 2 in structure "name_stack" dcl 773 in procedure "alm_table_tool" set ref 304* 338 name based varying char(24) level 2 in structure "chain_node" dcl 769 in procedure "alm_table_tool" set ref 250* 251 253* 253 253 304 name internal ctl varying char(10) level 2 in structure "instruction" dcl 740 in procedure "alm_table_tool" set ref 393* name internal ctl varying char(10) level 2 in structure "instruction2" dcl 743 in procedure "alm_table_tool" set ref 592 594* name 000742 automatic varying char(24) array level 2 in structure "temp_array" dcl 765 in procedure "alm_table_tool" set ref 242* 293 295 name_stack internal ctl structure level 1 unaligned dcl 773 set ref 303 328 328 336 340 707 708 new_cursor 000101 automatic fixed bin(35,0) dcl 685 set ref 688* 690* 691 692 694 new_line 000000 constant char(1) initial packed unaligned dcl 778 ref 577 614 687 691 next 10 based pointer level 2 in structure "chain_node" dcl 769 in procedure "alm_table_tool" set ref 249* 306 next 2 based pointer level 2 in structure "hash_entry" dcl 472 in begin block on line 470 set ref 505 506 509* 514* 554 no_of_classes 000271 automatic fixed bin(17,0) dcl 746 set ref 457* 459* 459 461 467* 481 481 481 526 null builtin function dcl 717 ref 170 186 230 301 348 488 498 505 514 530 num_exclude_names 40 005000 automatic fixed bin(17,0) level 2 dcl 794 set ref 347* 529* num_of_classes_less_1 000102 automatic fixed bin(17,0) initial level 3 dcl 481 set ref 481* num_of_decors 1 000102 automatic fixed bin(17,0) initial level 3 dcl 481 set ref 481* num_of_names 000100 automatic fixed bin(17,0) initial level 3 dcl 328 set ref 328* number 10 000100 automatic fixed bin(35,0) array level 4 in structure "alm_data1" dcl 328 in begin block on line 323 set ref 339* number 4 internal ctl fixed bin(17,0) level 2 in structure "instruction" dcl 740 in procedure "alm_table_tool" set ref 427* 428 number 4 internal ctl fixed bin(17,0) level 2 in structure "instruction2" dcl 743 in procedure "alm_table_tool" set ref 551 553 556* 602 603 number 7 internal ctl fixed bin(35,0) level 2 in structure "name_stack" dcl 773 in procedure "alm_table_tool" set ref 305* 339 p 005000 automatic pointer array level 3 dcl 794 set ref 343* 525* pad 44(04) 005000 automatic bit(32) level 3 packed packed unaligned dcl 794 set ref 353* 535* ptr 10 000742 automatic pointer array level 2 dcl 765 set ref 230* 247 248* 249 250 251 253 253 253 300 ptr1 000304 automatic pointer dcl 751 set ref 504* 505 506* 506 509 552* 553 554* 554 556 ptr_saver 004774 automatic pointer dcl 788 set ref 247* 249 ret_arg parameter varying char dcl 643 set ref 642 648* 652* 654* reverse builtin function dcl 790 ref 604 687 rtrim builtin function dcl 790 ref 571 search builtin function dcl 790 ref 604 651 664 674 sections 005000 automatic structure array level 2 unaligned dcl 794 seg_name 30 005000 automatic char(32) level 2 packed packed unaligned dcl 794 set ref 346* 528* separate_static 44(01) 005000 automatic bit(1) level 3 packed packed unaligned dcl 794 set ref 350* 532* significance 000100 automatic fixed bin(17,0) dcl 598 set ref 602* 603 size builtin function dcl 790 ref 344 526 slot_no 000270 automatic fixed bin(17,0) dcl 746 set ref 401* 404* 404 408 417 417 struct_name 3 005000 automatic char(32) array level 3 packed packed unaligned dcl 794 set ref 345* 527* structure 000100 automatic structure level 2 in structure "alm_data1" unaligned dcl 328 in begin block on line 323 structure 000102 automatic structure level 2 in structure "alm_data2" unaligned dcl 481 in begin block on line 470 substr builtin function dcl 790 ref 197 202 213 217 242 253 374 434 435 517 576 577 579 603 605 613 614 616 651 652 654 664 669 674 675 677 687 691 692 694 switches 44 005000 automatic structure level 2 packed packed unaligned dcl 794 symbol parameter varying char dcl 659 set ref 658 665* 670* 675* 677* table based char packed unaligned dcl 717 set ref 196* 204* 209* 212* 218* 234* 243* 256* 260* 268* 271* 373* 376* 379* 395* 398* 405* 409* 412* 420* 424* 431* 436* 438* 444* table_length 000306 automatic fixed bin(23,0) dcl 751 set ref 176* 196 196 204 204 209 209 212 212 218 218 234 234 243 243 256 256 260 260 268 268 271 271 373 373 376 376 379 379 395 395 398 398 405 405 409 409 412 412 420 420 424 424 431 431 436 436 438 438 444 444 717 table_position 000376 automatic fixed bin(17,0) dcl 751 set ref 270* 273* 273 369 table_ptr 000106 automatic pointer dcl 717 set ref 169* 170 196 204 209 212 218 234 243 256 260 268 271 373 376 379 395 398 405 409 412 420 424 431 436 438 444 717 temp_array 000742 automatic structure array level 1 unaligned dcl 765 set ref 229 237 239 239 293 temp_ptr 004772 automatic pointer dcl 788 in procedure "alm_table_tool" set ref 300* 301 304 306* 306 temp_ptr 000101 automatic fixed bin(35,0) dcl 659 in procedure "get_next_symbol" set ref 668* 669 673 temp_ptr2 000102 automatic fixed bin(35,0) dcl 659 set ref 669* 670 673 text parameter char packed unaligned dcl 643 in procedure "get_first_symbol" ref 642 647 651 652 654 text parameter char packed unaligned dcl 683 in procedure "current_line" ref 682 687 691 692 694 text parameter char packed unaligned dcl 659 in procedure "get_next_symbol" ref 658 664 669 674 675 677 this_pgm 000177 automatic char(14) initial packed unaligned dcl 717 set ref 144* 151* 158* 165* 172* 181* 188* 199* 214* 224* 239* 276* 297* 315* 358* 376* 398* 412* 420* 424* 440* 449* 463* 540* 567* 588* 594* 717* untouched_part 000105 automatic varying char(100) dcl 598 set ref 605* 606 verify builtin function dcl 790 ref 602 647 669 white_space 000302 automatic char(5) initial packed unaligned dcl 749 set ref 647 651 664 669 674 749* working_dir 002713 automatic char(168) packed unaligned dcl 781 set ref 563* 564* 571 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. declaration 000431 automatic varying char(200) dcl 751 decor_name 000514 automatic varying char(8) array dcl 751 exclude_names based char(32) array packed unaligned dcl 2-18 j 004777 automatic fixed bin(17,0) dcl 789 NAMES DECLARED BY EXPLICIT CONTEXT. alm_table_tool 000764 constant entry external dcl 26 att 000774 constant entry external dcl 26 clean_up 007046 constant entry internal dcl 700 ref 138 631 closest_prime 006436 constant entry internal dcl 637 ref 467 current_line 006733 constant entry internal dcl 682 ref 271 376 398 412 420 424 get_first_symbol 006444 constant entry internal dcl 642 ref 196 272 573 get_next_symbol 006551 constant entry internal dcl 658 ref 204 209 212 218 234 243 256 260 268 279 309 318 373 379 395 405 409 431 436 438 444 581 591 610 618 return_point 006431 constant label dcl 631 ref 135 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 7604 7674 7334 7614 Length 14346 7334 70 4435 247 24 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME alm_table_tool 2768 external procedure is an external procedure. on unit on line 135 64 on unit on unit on line 138 64 on unit begin block on line 323 98 begin block uses auto adjustable storage. begin block on line 383 484 begin block uses auto adjustable storage, contains a format statement, and uses I/O statements. begin block on line 470 106 begin block uses auto adjustable storage. begin block on line 597 276 begin block contains a format statement, and uses I/O statements. closest_prime internal procedure shares stack frame of begin block on line 383. get_first_symbol 70 internal procedure is called during a stack extension. get_next_symbol 72 internal procedure is called during a stack extension. current_line 70 internal procedure is called by several nonquick procedures. clean_up 114 internal procedure uses I/O statements. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME alm_table_tool 000100 arg1l alm_table_tool 000101 arg2l alm_table_tool 000102 arg1p alm_table_tool 000104 arg2p alm_table_tool 000106 table_ptr alm_table_tool 000110 defops_ptr alm_table_tool 000112 code alm_table_tool 000113 bit_ct alm_table_tool 000114 dir_name alm_table_tool 000166 entry_name alm_table_tool 000176 arg_no alm_table_tool 000177 this_pgm alm_table_tool 000203 cursor alm_table_tool 000204 DEC_no alm_table_tool 000205 current_symbol alm_table_tool 000270 slot_no alm_table_tool 000271 no_of_classes alm_table_tool 000272 clsnum alm_table_tool 000273 hash_no alm_table_tool 000302 white_space alm_table_tool 000304 ptr1 alm_table_tool 000306 table_length alm_table_tool 000307 defops_length alm_table_tool 000310 array_size alm_table_tool 000311 last_symbol alm_table_tool 000374 n alm_table_tool 000375 hash_index alm_table_tool 000376 table_position alm_table_tool 000377 macro_line alm_table_tool 000431 declaration alm_table_tool 000514 decor_name alm_table_tool 000574 message alm_table_tool 000626 line alm_table_tool 000742 temp_array alm_table_tool 002712 comment_length alm_table_tool 002713 working_dir alm_table_tool 002766 dont_care alm_table_tool 002770 chain_space alm_table_tool 004770 end_of_synonyms alm_table_tool 004772 temp_ptr alm_table_tool 004774 ptr_saver alm_table_tool 004776 m alm_table_tool 004777 j alm_table_tool 005000 cds_argsA alm_table_tool begin block on line 323 000100 alm_data1 begin block on line 323 000100 n begin block on line 323 000101 m begin block on line 323 begin block on line 383 000100 bit_register begin block on line 383 000100 bit_string begin block on line 383 000100 class_array begin block on line 383 begin block on line 470 000100 hash_table begin block on line 470 000100 hash_entry_ptr begin block on line 470 000102 alm_data2 begin block on line 470 begin block on line 597 000100 significance begin block on line 597 000102 char_num begin block on line 597 000104 last_comma begin block on line 597 000105 untouched_part begin block on line 597 current_line 000100 n current_line 000101 new_cursor current_line 000102 extent current_line get_first_symbol 000100 extent get_first_symbol get_next_symbol 000100 extent get_next_symbol 000101 temp_ptr get_next_symbol 000102 temp_ptr2 get_next_symbol THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_ne_as alloc_char_temp cat_realloc_chars enter_begin_block leave_begin_block call_ext_out_desc call_ext_out call_int_this_desc call_int_this call_int_other_desc call_int_other return_mac longbs_to_fx2 tra_ext_1 alloc_auto_adj mdfx1 signal_op enable_op shorten_stack ext_entry int_entry int_entry_desc put_terminate strem_prep open_file close_file push_ctl_data pop_ctl_data allocation set_chars_eis set_bits_eis index_chars_eis verify_eis search_eis put_field put_control op_alloc_ alloc_storage op_empty_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ com_err_$suppress_name create_data_segment_ cu_$arg_count cu_$arg_ptr decimal_exp_ expand_pathname_ get_wdir_ hcs_$initiate_count hcs_$make_seg THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. defops_incl_alm defops_incl_alm.fsb error_table_$noarg LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 717 000734 749 000737 786 000741 796 000744 26 000763 135 001002 138 001021 141 001043 142 001052 144 001055 145 001102 148 001103 149 001122 151 001132 152 001147 155 001150 156 001167 158 001171 159 001215 162 001216 163 001246 165 001250 166 001303 169 001304 170 001346 172 001352 173 001376 176 001377 178 001403 179 001433 181 001435 182 001461 185 001462 186 001524 188 001530 191 001554 196 001560 197 001603 199 001607 200 001634 202 001637 204 001653 207 001676 208 001721 209 001734 210 001757 211 001760 212 001765 213 002010 214 002014 215 002041 217 002044 218 002060 220 002103 222 002104 224 002106 225 002133 229 002136 230 002143 231 002147 232 002151 234 002152 235 002175 236 002210 237 002211 239 002214 240 002247 242 002252 243 002267 245 002312 246 002313 247 002316 248 002322 249 002331 250 002336 251 002347 253 002361 254 002367 256 002371 257 002414 259 002421 260 002423 262 002446 264 002447 268 002450 270 002473 271 002475 272 002520 273 002550 274 002557 276 002564 277 002611 279 002614 285 002644 286 002646 288 002647 289 002655 293 002656 294 002673 295 002675 297 002706 298 002737 300 002742 301 002746 302 002752 303 002753 304 002757 305 002767 306 002771 307 002773 309 002774 310 003024 312 003032 314 003045 315 003052 316 003074 318 003077 319 003127 323 003131 328 003134 336 003147 337 003152 338 003157 339 003172 340 003174 341 003176 343 003201 344 003204 345 003210 346 003213 347 003216 348 003217 349 003221 350 003223 351 003225 352 003227 353 003231 355 003233 356 003246 358 003251 359 003300 362 003303 368 003304 369 003330 373 003334 374 003357 376 003363 377 003443 379 003446 383 003471 384 003506 385 003522 386 003534 387 003543 390 003545 391 003561 392 003570 393 003574 394 003607 395 003614 396 003640 398 003646 399 003733 401 003736 402 003740 403 003753 404 003762 405 003763 406 004007 408 004022 409 004027 410 004053 412 004061 413 004143 416 004146 417 004147 420 004154 421 004236 422 004241 424 004242 425 004326 427 004331 428 004340 429 004344 431 004345 434 004371 435 004377 436 004413 437 004437 438 004446 439 004472 440 004500 441 004525 443 004530 444 004531 445 004555 447 004556 449 004563 450 004614 457 004617 458 004621 459 004632 461 004640 463 004643 464 004674 466 004677 467 004702 470 004712 471 004715 481 004727 488 004743 489 004760 492 004764 493 004775 495 005003 497 005004 498 005007 500 005015 501 005021 502 005026 504 005027 505 005033 506 005043 507 005045 508 005046 509 005052 512 005056 513 005060 514 005062 517 005064 519 005110 525 005112 526 005114 527 005122 528 005125 529 005130 530 005131 531 005133 532 005135 533 005137 534 005141 535 005143 537 005145 538 005160 540 005164 541 005213 547 005216 548 005222 549 005225 550 005236 551 005240 552 005250 553 005254 554 005263 555 005266 556 005267 557 005272 559 005273 563 005274 564 005304 565 005352 567 005355 568 005401 571 005404 573 005465 576 005513 577 005526 578 005551 579 005561 580 005607 581 005614 582 005640 584 005641 585 005663 586 005672 588 005676 589 005722 591 005725 592 005752 594 005765 595 006021 597 006024 602 006041 603 006063 604 006077 605 006113 606 006124 607 006161 608 006207 609 006210 610 006213 613 006240 614 006252 615 006275 616 006305 617 006333 618 006340 619 006364 621 006365 622 006407 624 006411 625 006423 629 006430 631 006431 797 006435 637 006436 639 006440 642 006443 647 006464 648 006474 651 006500 652 006522 654 006536 656 006547 658 006550 664 006571 665 006615 668 006621 669 006630 670 006650 673 006654 674 006663 675 006704 677 006720 680 006731 682 006732 687 006746 688 006762 690 006766 691 006775 692 007020 694 007034 700 007045 701 007062 702 007066 703 007070 704 007071 705 007076 706 007100 707 007101 708 007106 709 007110 710 007111 711 007115 ----------------------------------------------------------- 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