PL/M-86 COMPILER    CODEMACRO MODULE 2                                           10/5/81    PAGE   1


ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE CM2
OBJECT MODULE PLACED IN CM2.OBJ
COMPILER INVOKED BY:  :F0: CM2.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100) XREF



              $title ('codemacro module 2')
   1          cm2:
              do;

              /*

                modified  3/26/81  R. Silberstein

              */

              /*    This is the module to build new instructions
                    which is not present in the already existing
                    system. */

              $include (:f1:macro.lit)
          =   $nolist
              $include (:f1:equals.lit)
          =   $nolist
              $include (:f1:struc.lit)
          =   $nolist
              $include (:f1:cmacd.lit)
          =   $nolist
              $include (:f1:cm.lit)
          =   $nolist
              $include (:f1:symb.ext)
          =   $nolist
              $include (:f1:subr1.ext)
          =   $nolist
              $include (:f1:subr2.ext)
          =   $nolist
              $include (:f1:scan.ext)
          =   $nolist
              $include (:f1:files.ext)
          =   $nolist
              $include (:f1:exglob.ext)
          =   $nolist

PL/M-86 COMPILER    CODEMACRO MODULE 2                                           10/5/81    PAGE   2


              $eject

              /*    D E C L A R A T I O N   F O R   "C O D E M A C R O"   P A R T

                    Extended version of ASM86 */

 148   1      dcl      cm$name(80)       byte                      ,
                       codemacro$found   byte                      ,
                       cm$n$pt           address                   ,
                       cm$n$var          based       cm$n$pt   byte,
                       cm$n$lg           byte                      ,
                       par$name(80)      byte                      ,
                       pmpt              address                   ,
                       cm$pm$var         based       pmpt      byte,
                       cm$error          byte        public        ,
                       cm$body(100)      byte                      ,
                       cmpt              address     public        ,
                       cm$b$var          based       cmpt      byte,
                       cm$w$var          based       cmpt      addr,
                       cm$counter        addr                      ,
                       global$cm$error   byte        public        ,
                       cm$body$full      byte                      ,
                       ant$par           byte                      ,
                       cm$list$overflow  byte        public;

PL/M-86 COMPILER    CODEMACRO MODULE 2                                           10/5/81    PAGE   3


              $eject

              /*   VARIOUS SUBROUTINES */

 149   1      legal$parameter: PROC(lg,ptr,ptr2) byte public;
 150   2        dcl (lg,i) byte,
                    (ptr,ptr2) address,
                     no based ptr2 byte;
 151   2        i=0;
 152   2        do no=0 to cm$body(2)-1;
 153   3          if parname(i+lg) = 0 and
                  equal(lg,ptr,.par$name(i)) then return true;
 155   3          do while par$name(i:=i+1) <> 0;
 156   4          end$while;
 157   3          i=i+1;
 158   3        end;
 159   2        return false;
 160   2      end$proc legal$parameter;

 161   1      legal$spec$letter: PROC(l) byte;
 162   2        dcl (l,i) byte;
 163   2        dcl table(8) byte data ('ACDEMRSX');
 164   2        do i=0 to last(table);
 165   3          if table(i) = l then return i;
 167   3        end;
 168   2        return i;
 169   2      end$proc legal$spec$letter;

 170   1      legal$mod$letter: PROC(l) byte;
 171   2        dcl (l,i) byte;
 172   2        dcl table(4) byte data ('BWDS');
 173   2        do i=0 to last(table);
 174   3          if table(i) = l and i < 3 then return i;
 176   3          if table(i) = l and i = 3 then$do
 178   4            if accum(2) = 'B' then return 3;
                  end$if;
 181   3        end;
 182   2        return i;
 183   2      end$proc legal$mod$letter;

 184   1      legal$register: PROC byte;
 185   2        declare disp byte;
 186   2        if token.type <> reg then return 0;
 188   2        disp=0;
 189   2        if token.descr=byt then disp=8;
 191   2        if token.descr=dwrd then disp=16;
 193   2        return token.value + disp + 1;
 194   2      end$proc legal$register;

 195   1      legal$seg$reg: PROC byte public;
 196   2        if token.type <> reg then return 0;
 198   2        if token.descr <> dwrd then return 0;
 200   2        return token.value + 1;
 201   2      end$proc legal$seg$reg;

 202   1      put$b: PROC(b) public;
 203   2        dcl b byte;
PL/M-86 COMPILER    CODEMACRO MODULE 2                                           10/5/81    PAGE   4


 204   2        cm$counter=cm$counter+1;
 205   2        if cm$counter > 99 then$do
 207   3          cm$error=true;
 208   3          cm$body$full=true;
 209   3          return;
 210   3        end$if;
 211   2        cm$b$var=b;
 212   2        cmpt=cmpt+1;
 213   2      end$proc put$b;

 214   1      put$w: PROC(w) public;
 215   2        dcl w addr;
 216   2        cm$counter=cm$counter+2;
 217   2        if cm$counter > 99 then$do
 219   3          cm$error=true;
 220   3          cm$body$full=true;
 221   3          return;
 222   3        end$if;
 223   2        cm$w$var=w;
 224   2        cmpt=cmpt+2;
 225   2      end$proc put$w;

 226   1      update$cm$lists: PROC byte;
 227   2        dcl listptr address,next based listptr address;
 228   2        dcl ptr address;
 229   2        ptr=.listptr;
 230   2        if findcodemacro(cm$n$lg,.cm$name(0),ptr)
                then$do
 232   3          do while next <> 0;
 233   4            listptr=next;
 234   4          end$while;
 235   3        else$do
 237   3          if not new$cm$name(cm$n$lg,.cm$name(0),ptr)
                  then return false;
                end$if;
 240   2        next=freept;
 241   2        if not new$cm$body(cm$counter,.cm$body(0))
                then return false;
 243   2        return true;
 244   2      end$proc update$cm$lists;

PL/M-86 COMPILER    CODEMACRO MODULE 2                                           10/5/81    PAGE   5


              $eject

              /* level 4 in the syntax-tree of coeemacro building */

 245   1      register$rout: PROC (l);
 246   2        dcl l byte;
 247   2        call put$b(l);
 248   2      end$proc register$rout;

 249   1      range$rout: PROC;

 250   2        put$range: PROC(time);
 251   3          dcl time byte;
 252   3          if token.type = number then$do
 254   4            if time = first then$do
 256   5              cm$b$var=cm$b$var+numberrange;
 257   5              cmpt=cmpt+1;
 258   5            end$if;
 259   4            if token.value > 0ffh then$do
 261   5              cm$error=true; /* too large number */
 262   5              return;
 263   5            else$do
 265   5              call put$b(token.value);
 266   5            end$if;
 267   4          else$do
 269   4            if time = first then$do
 271   5              cm$b$var=cm$b$var+registerrange;
 272   5              cmpt=cmpt+1;
 273   5            end$if;
 274   4            do case legal$register;
 275   5              do; /* error, expecting a register spec. */
 276   6                cm$error=true;
 277   6                return;
 278   6              end;
 279   5              call register$rout(rax);
 280   5              call register$rout(rcx);
 281   5              call register$rout(rdx);
 282   5              call register$rout(rbx);
 283   5              call register$rout(rsp);
 284   5              call register$rout(rbp);
 285   5              call register$rout(rsi);
 286   5              call register$rout(rdi);
 287   5              call register$rout(ral);
 288   5              call register$rout(rcl);
 289   5              call register$rout(rdl);
 290   5              call register$rout(rbl);
 291   5              call register$rout(rah);
 292   5              call register$rout(rch);
 293   5              call register$rout(rdh);
 294   5              call register$rout(rbh);
 295   5              call register$rout(res);
 296   5              call register$rout(rcs);
 297   5              call register$rout(rss);
 298   5              call register$rout(rds);
 299   5            end$case;
 300   4          end$if;
 301   3          call scan;
PL/M-86 COMPILER    CODEMACRO MODULE 2                                           10/5/81    PAGE   6


 302   3        end$proc put$range;


 303   2        s$range: PROC;
 304   3          cmpt=cmpt-1;
 305   3          cm$b$var=cm$b$var+singlerange;
 306   3          call put$range(first);
 307   3        end$proc s$range;


 308   2        d$range: PROC;
 309   3          cmpt=cmpt-1;
 310   3          cm$b$var=cm$b$var+doublerange;
 311   3          call put$range(first);
 312   3          if accum(0) <> comma then$do
 314   4            cm$error=true;
 315   4            return;
 316   4          end$if;
 317   3          call scan;
 318   3          call put$range(second);
 319   3          if accum(0) <> rightpar then$do
 321   4            cm$error=true;
 322   4            return;
 323   4          end$if;
                end$proc d$range;

              /* mainpart of range routine */

 325   2        call scan; /* skip left paranthesis */
 326   2        if nextch = comma then call d$range;
 328   2                          else call s$range;
 329   2        call scan;
 330   2      end$proc range$rout;

 331   1      spec$letter$rout: PROC(l);
 332   2        dcl l byte;
 333   2        call put$b(l);
 334   2      end$proc spec$letter$rout;

 335   1      mod$letter$rout: PROC(l);
 336   2        dcl l byte;
 337   2        call put$b(l);
 338   2      end$proc mod$letter$rout;

PL/M-86 COMPILER    CODEMACRO MODULE 2                                           10/5/81    PAGE   7


              $eject

              /* level 3 in the syntax-tree of codemacro building */

 339   1      par$descr$rout: PROC;
 340   2        call copy(acclen,.accum(0),.cm$pm$var);
 341   2        pmpt=pmpt+acclen;
 342   2        cm$pm$var=0; /* end of par.name */
 343   2        pmpt=pmpt+1;
 344   2        call scan;
 345   2        if accum(0) <> colon then$do
                  /* error, expected colon in parameterdecl */
 347   3          cm$error=true;
 348   3        end$if;
 349   2        call scan;
 350   2        do case legal$spec$letter(accum(0));
 351   3          call spec$letter$rout(speca);
 352   3          call spec$letter$rout(specc);
 353   3          call spec$letter$rout(specd);
 354   3          call spec$letter$rout(spece);
 355   3          call spec$letter$rout(specm);
 356   3          call spec$letter$rout(specr);
 357   3          call spec$letter$rout(specs);
 358   3          call spec$letter$rout(specx);
 359   3          do; /* error, expected specifier letter */
 360   4            cm$error=true;
 361   4            return;
 362   4          end;
 363   3        end$case;

 364   2        do case legal$mod$letter(accum(1));
 365   3          call mod$letter$rout(modb);
 366   3          call mod$letter$rout(modw);
 367   3          call mod$letter$rout(modd);
 368   3          call mod$letter$rout(modsb);
 369   3          call mod$letter$rout(nomod); /* no modletter */
 370   3        end$case;
 371   2        call scan;
 372   2        if accum(0) = leftpar then call range$rout;
 374   2        cm$body(2)=cm$body(2)+1;
 375   2      end$proc par$descr$rout;

PL/M-86 COMPILER    CODEMACRO MODULE 2                                           10/5/81    PAGE   8


              $eject

              /* level 2 in the syntax-tree of codemacro building */

              /* Procedure to initialize temporary storage and pointers
                 conserning the building of codemacro */
 376   1      init$cm$rout: PROC public;
 377   2        cm$n$pt=.cm$name(0);
 378   2        cmpt=.cm$body(0)+3; /* correcting for the head */
 379   2        pmpt=.par$name(0);
 380   2        CALL FILL (0, LENGTH (CM$NAME), .CM$NAME);
 381   2        CALL FILL (0, LENGTH (CM$BODY), .CM$BODY);
 382   2        CALL FILL (0, LENGTH (PAR$NAME), .PAR$NAME);
 383   2        ant$par=0;
 384   2        cm$counter=3;
 385   2        cm$body$full=false;
 386   2        cm$list$overflow=false;
 387   2      end$proc init$cm$rout;

 388   1      name$rout: PROC byte public;
 389   2        if token.type <> ident then return false;
 391   2        call copy(acclen,.accum(0),.cm$name(0));
 392   2        cm$n$lg=acclen;
 393   2        call scan;
 394   2        return true;
 395   2      end$proc name$rout;

 396   1      formal$list$rout: PROC public;
 397   2        do while token.type = ident;
 398   3          call par$descr$rout;
 399   3          if accum(0) <> ',' then return;  /* end of parameters */
 401   3          call scan;
 402   3        end$while;
 403   2      end$proc formal$list$rout;

 404   1      terminate$cm$rout: PROC public;
 405   2        if global$cm$error then$do
                  /* error present in codemacrodef, */
                  /* no updating of codemacrolist   */
 407   3          return;
 408   3        end$if;
 409   2        if not update$cm$lists
                then$do
 411   3          cm$error=true; /* overflow, no more vacant memory */
 412   3          cm$list$overflow=true;
 413   3          return;
 414   3        end$if;
              end$proc terminate$cm$rout;


 416   1      end$module cm2;
PL/M-86 COMPILER    CODEMACRO MODULE 2                                           10/5/81    PAGE   9


CROSS-REFERENCE LISTING
-----------------------


   DEFN  ADDR   SIZE  NAME, ATTRIBUTES, AND REFERENCES
  ----- ------ -----  --------------------------------


    147  0000H     1  ACCLEN . . . . . .    BYTE EXTERNAL(59)         340  341  391  392 
    147  0000H    80  ACCUM. . . . . . .    BYTE ARRAY(80) EXTERNAL(60)         178  312  319
                                             340  345  350  364  372  391  399 
      2               ADDR . . . . . . .    LITERALLY        18   19   25   28   31   34   37
                                              40   43   46   49   52   55   58   64   82   85
                                              88   91  143  147  148  215 
     72  0000H        ALPHANUMERIC . . .    PROCEDURE BYTE EXTERNAL(20) STACK=0000H
    148  0115H     1  ANTPAR . . . . . .    BYTE       383 
     75  0000H        ASCIICHAR. . . . .    PROCEDURE BYTE EXTERNAL(21) STACK=0000H
     45  0000H     2  ASCIIPTR . . . . .    WORD PARAMETER        46 
    202  0004H     1  B. . . . . . . . .    BYTE PARAMETER AUTOMATIC       203  211 
    147  0008H     1  BASEINDEX. . . . .    BYTE MEMBER(OPERANDS)
      8               BASEREGBIT . . . .    LITERALLY
      8               BASEREGCOUNT . . .    LITERALLY
      8               BREGBIT. . . . . .    LITERALLY
      8               BREGCOUNT. . . . .    LITERALLY
      4               BYT. . . . . . . .    LITERALLY       189 
     69  0000H     1  CH . . . . . . . .    BYTE PARAMETER        70 
     72  0000H     1  CH . . . . . . . .    BYTE PARAMETER        73 
     75  0000H     1  CH . . . . . . . .    BYTE PARAMETER        76 
     63  0000H     1  CH . . . . . . . .    BYTE PARAMETER        64 
    110  0000H     1  CH . . . . . . . .    BYTE PARAMETER       111 
     78  0000H     1  CH . . . . . . . .    BYTE PARAMETER        79 
    113  0000H     1  CH . . . . . . . .    BYTE PARAMETER       114 
     66  0000H     1  CH . . . . . . . .    BYTE PARAMETER        67 
    107  0000H     1  CH . . . . . . . .    BYTE PARAMETER       108 
    147  0000H     2  CIP. . . . . . . .    WORD EXTERNAL(51)
    136  0000H        CLOSEHEX . . . . .    PROCEDURE EXTERNAL(46) STACK=0000H
    134  0000H        CLOSEINCLUDE . . .    PROCEDURE EXTERNAL(45) STACK=0000H
    138  0000H        CLOSEPRINT . . . .    PROCEDURE EXTERNAL(47) STACK=0000H
    130  0000H        CLOSESOURCE. . . .    PROCEDURE EXTERNAL(43) STACK=0000H
    140  0000H        CLOSESYMBOL. . . .    PROCEDURE EXTERNAL(48) STACK=0000H
      1  0000H        CM2. . . . . . . .    PROCEDURE STACK=0000H
    148  00AFH   100  CMBODY . . . . . .    BYTE ARRAY(100)      152  241  374  378  381 
    148  0114H     1  CMBODYFULL . . . .    BYTE       208  220  385 
    148  0000H     1  CMBVAR . . . . . .    BYTE BASED(CMPT)          211  256  271  305  310
                                            
    148  0006H     2  CMCOUNTER. . . . .    WORD       204  205  216  217  241  384 
    148  00AEH     1  CMERROR. . . . . .    BYTE PUBLIC          207  219  261  276  314  321
                                             347  360  411 
    148  0116H     1  CMLISTOVERFLOW . .    BYTE PUBLIC          386  412 
    148  000CH    80  CMNAME . . . . . .    BYTE ARRAY(80)       230  237  377  380  391 
    148  005DH     1  CMNLG. . . . . . .    BYTE       230  237  392 
    148  0000H     2  CMNPT. . . . . . .    WORD       148  377 
    148  0000H     1  CMNVAR . . . . . .    BYTE BASED(CMNPT)
    148  0000H     1  CMPMVAR. . . . . .    BYTE BASED(PMPT)          340  342 
    148  0004H     2  CMPT . . . . . . .    WORD PUBLIC          148  211  212  223  224  256
                                             257  271  272  304  305  309  310  378 
    148  0000H     2  CMWVAR . . . . . .    WORD BASED(CMPT)          223 
PL/M-86 COMPILER    CODEMACRO MODULE 2                                           10/5/81    PAGE  10


      3               CODE . . . . . . .    LITERALLY
    148  005CH     1  CODEMACROFOUND . .    BYTE
      8               CODEMACROHEAD. . .    LITERALLY
     17               COLON. . . . . . .    LITERALLY       345 
     17               COMMA. . . . . . .    LITERALLY       312  326 
     54  0000H        COPY . . . . . . .    PROCEDURE EXTERNAL(14) STACK=0000H       340  391
      2               CR . . . . . . . .    LITERALLY
    147  0000H     1  CSEGSPEC . . . . .    BYTE EXTERNAL(54)
    147  0000H     1  CSEGTYPE . . . . .    BYTE EXTERNAL(52)
    147  0000H     2  CSEGVALUE. . . . .    WORD EXTERNAL(53)
     12               CSOVER . . . . . .    LITERALLY
    147  0000H     2  CURDSEG. . . . . .    WORD EXTERNAL(56)
     87  0000H     2  D. . . . . . . . .    WORD PARAMETER        88 
     81  0000H     2  D. . . . . . . . .    WORD PARAMETER        82 
     54  0000H     2  D. . . . . . . . .    WORD PARAMETER        55 
     84  0000H     2  D. . . . . . . . .    WORD PARAMETER        85 
     90  0000H     2  D. . . . . . . . .    WORD PARAMETER        91 
      2               DCL. . . . . . . .    LITERALLY
     90  0000H        DECOUT . . . . . .    PROCEDURE EXTERNAL(26) STACK=0000H
      3               DELETEDSYMB. . . .    LITERALLY
    147  0001H     1  DESCR. . . . . . .    BYTE MEMBER(TOKEN)        189  191  198 
     33  0000H     2  DEST . . . . . . .    WORD PARAMETER        34 
    142  0000H     1  DEV. . . . . . . .    BYTE PARAMETER       143 
     66  0000H        DIGIT. . . . . . .    PROCEDURE BYTE EXTERNAL(18) STACK=0000H
    185  011AH     1  DISP . . . . . . .    BYTE       188  190  192  193 
      3               DOUBLEDEFINED. . .    LITERALLY
     16               DOUBLERANGE. . . .    LITERALLY       310 
    308  02DCH    53  DRANGE . . . . . .    PROCEDURE STACK=0014H          327 
     12               DSOVER . . . . . .    LITERALLY
    147  0000H     1  DSPEC. . . . . . .    BYTE EXTERNAL(55)
      4               DWRD . . . . . . .    LITERALLY       191  198 
      2               ELSEDO . . . . . .    LITERALLY
    105  0000H        EMPTYLINE. . . . .    PROCEDURE BYTE EXTERNAL(32) STACK=0000H
      2               ENDCASE. . . . . .    LITERALLY
      2               ENDDO. . . . . . .    LITERALLY
      2               ENDFOREVER . . . .    LITERALLY
      2               ENDIF. . . . . . .    LITERALLY       179  238 
      2               ENDMODULE. . . . .    LITERALLY
      2               ENDOFFILE. . . . .    LITERALLY
     19  0000H     2  ENDOFSYMBTAB . . .    WORD EXTERNAL(1)
      2               ENDPROC. . . . . .    LITERALLY       323  414 
      2               ENDWHILE . . . . .    LITERALLY
     36  0000H        ENTERATTRIBUTES. .    PROCEDURE EXTERNAL(8) STACK=0000H
     81  0000H        EQUAL. . . . . . .    PROCEDURE BYTE EXTERNAL(23) STACK=0000H       153
      3               ERROR. . . . . . .    LITERALLY
     12               ESOVER . . . . . .    LITERALLY
      2               FALSE. . . . . . .    LITERALLY       159  238  242  385  386  390 
     60  0000H     2  FCBADR . . . . . .    WORD PARAMETER        61 
     60  0000H        FILEABORT. . . . .    PROCEDURE EXTERNAL(16) STACK=0000H
      8               FILEISTRUCTURE . .    LITERALLY
      8               FILEOSTRUCTURE . .    LITERALLY
    145  0000H        FILESETUP. . . . .    PROCEDURE BYTE EXTERNAL(50) STACK=0000H
     63  0000H        FILL . . . . . . .    PROCEDURE EXTERNAL(17) STACK=0000H       380  381
                                             382 
    142  0000H     2  FILNAM . . . . . .    WORD PARAMETER       143 
    142  0000H     2  FILTYP . . . . . .    WORD PARAMETER       143 
     39  0000H        FINDCODEMACRO. . .    PROCEDURE BYTE EXTERNAL(9) STACK=0000H        230
PL/M-86 COMPILER    CODEMACRO MODULE 2                                           10/5/81    PAGE  11


     30  0000H        FINDSYMBOL . . . .    PROCEDURE BYTE EXTERNAL(6) STACK=0000H
     17               FIRST. . . . . . .    LITERALLY       254  269  306  311 
      2               FOREVER. . . . . .    LITERALLY
    396  0479H    29  FORMALLISTROUT . .    PROCEDURE PUBLIC STACK=0020H
      2               FORMFEED . . . . .    LITERALLY
     18  0000H     2  FREEPT . . . . . .    WORD EXTERNAL(0)          240 
     33  0000H        GETATTRIBUTES. . .    PROCEDURE EXTERNAL(7) STACK=0000H
    148  0113H     1  GLOBALCMERROR. . .    BYTE PUBLIC          405 
     84  0000H        HEX1OUT. . . . . .    PROCEDURE EXTERNAL(24) STACK=0000H
     87  0000H        HEX2OUT. . . . . .    PROCEDURE EXTERNAL(25) STACK=0000H
    150  0117H     1  I. . . . . . . . .    BYTE       151  153  155  157 
    171  0119H     1  I. . . . . . . . .    BYTE       173  174  175  176  182 
    162  0118H     1  I. . . . . . . . .    BYTE       164  165  166  168 
      3               IDENT. . . . . . .    LITERALLY       389  397 
    142  0000H        IFILESETUP . . . .    PROCEDURE EXTERNAL(49) STACK=0000H
      8               INDEXREGBIT. . . .    LITERALLY
      8               INDEXREGCOUNT. . .    LITERALLY
    118  0000H        ININCLUDEBYTE. . .    PROCEDURE BYTE EXTERNAL(37) STACK=0000H
      2               INIT . . . . . . .    LITERALLY
    376  0400H    79  INITCMROUT . . . .    PROCEDURE PUBLIC STACK=000AH
    116  0000H        INSOURCEBYTE . . .    PROCEDURE BYTE EXTERNAL(36) STACK=0000H
      8               IREGBIT. . . . . .    LITERALLY
      8               IREGCOUNT. . . . .    LITERALLY
    170  0004H     1  L. . . . . . . . .    BYTE PARAMETER AUTOMATIC       171  174  176 
    161  0004H     1  L. . . . . . . . .    BYTE PARAMETER AUTOMATIC       162  165 
    335  0004H     1  L. . . . . . . . .    BYTE PARAMETER AUTOMATIC       336  337 
    331  0004H     1  L. . . . . . . . .    BYTE PARAMETER AUTOMATIC       332  333 
    245  0004H     1  L. . . . . . . . .    BYTE PARAMETER AUTOMATIC       246  247 
      3               LAB. . . . . . . .    LITERALLY
                      LAST . . . . . . .    BUILTIN         164  173 
      7               LEFTBRACKET. . . .    LITERALLY
     17               LEFTPAR. . . . . .    LITERALLY       372 
    170  009AH    76  LEGALMODLETTER . .    PROCEDURE BYTE STACK=0004H          364 
    149  0000H   113  LEGALPARAMETER . .    PROCEDURE BYTE PUBLIC STACK=0012H
    184  00E6H    55  LEGALREGISTER. . .    PROCEDURE BYTE STACK=0002H          274 
    195  011DH    27  LEGALSEGREG. . . .    PROCEDURE BYTE PUBLIC STACK=0002H
    161  0071H    41  LEGALSPECLETTER. .    PROCEDURE BYTE STACK=0004H          350 
                      LENGTH . . . . . .    BUILTIN         380  381  382 
    147  0000H     2  LENGTH . . . . . .    WORD MEMBER(OPERANDS)
     69  0000H        LETTER . . . . . .    PROCEDURE BYTE EXTERNAL(19) STACK=0000H
      2               LF . . . . . . . .    LITERALLY
    149  0008H     1  LG . . . . . . . .    BYTE PARAMETER AUTOMATIC       150  153 
     45  0000H     1  LG . . . . . . . .    BYTE PARAMETER        46 
     42  0000H     1  LG . . . . . . . .    BYTE PARAMETER        43 
     39  0000H     1  LG . . . . . . . .    BYTE PARAMETER        40 
     30  0000H     1  LG . . . . . . . .    BYTE PARAMETER        31 
     27  0000H     1  LG . . . . . . . .    BYTE PARAMETER        28 
     24  0000H     1  LG . . . . . . . .    BYTE PARAMETER        25 
    227  0008H     2  LISTPTR. . . . . .    WORD       227  229  232  233  240 
      2               LIT. . . . . . . .    LITERALLY         2    3    4    5    6    7    8
                                               9   10   11   12   13   14   15   16   17 
     27  0000H     2  MACDEFPT . . . . .    WORD PARAMETER        28 
      9               MDBF . . . . . . .    LITERALLY
      9               MDBIT. . . . . . .    LITERALLY
      9               MDBN . . . . . . .    LITERALLY
      9               MDDF . . . . . . .    LITERALLY
      9               MDWF . . . . . . .    LITERALLY
PL/M-86 COMPILER    CODEMACRO MODULE 2                                           10/5/81    PAGE  12


      9               MDWN . . . . . . .    LITERALLY
      9               MENDBIT. . . . . .    LITERALLY
      9               MENDM. . . . . . .    LITERALLY
      9               MFORMALBITS. . . .    LITERALLY
      9               MMODRM1. . . . . .    LITERALLY
      9               MMODRM2. . . . . .    LITERALLY
      9               MNOSEGFIX. . . . .    LITERALLY
      9               MNUMBERBITS. . . .    LITERALLY
     11               MODB . . . . . . .    LITERALLY       365 
     11               MODD . . . . . . .    LITERALLY       367 
     15               MODLETTERBIT . . .    LITERALLY
     15               MODLETTERCOUNT . .    LITERALLY
    335  031EH    13  MODLETTERROUT. . .    PROCEDURE STACK=000AH          365  366  367  368
                                             369 
     11               MODSB. . . . . . .    LITERALLY       368 
     11               MODW . . . . . . .    LITERALLY       366 
      9               MRELB. . . . . . .    LITERALLY
      9               MRELW. . . . . . .    LITERALLY
      9               MSEGFIX. . . . . .    LITERALLY
     90  0000H     2  N. . . . . . . . .    WORD PARAMETER        91 
     87  0000H     2  N. . . . . . . . .    WORD PARAMETER        88 
     84  0000H     1  N. . . . . . . . .    BYTE PARAMETER        85 
     81  0000H     1  N. . . . . . . . .    BYTE PARAMETER        82 
     63  0000H     1  N. . . . . . . . .    BYTE PARAMETER        64 
     54  0000H     1  N. . . . . . . . .    BYTE PARAMETER        55 
     51  0000H     2  N. . . . . . . . .    WORD PARAMETER        52 
    388  044FH    42  NAMEROUT . . . . .    PROCEDURE BYTE PUBLIC STACK=000AH
      3               NEGLECTED. . . . .    LITERALLY
     42  0000H        NEWCMBODY. . . . .    PROCEDURE BYTE EXTERNAL(10) STACK=0000H       241
     45  0000H        NEWCMNAME. . . . .    PROCEDURE BYTE EXTERNAL(11) STACK=0000H       237
     27  0000H        NEWMACRO . . . . .    PROCEDURE BYTE EXTERNAL(5) STACK=0000H
     24  0000H        NEWSYMBOL. . . . .    PROCEDURE BYTE EXTERNAL(4) STACK=0000H
    227  0000H     2  NEXT . . . . . . .    WORD BASED(LISTPTR)       232  233  240 
    147  0000H     1  NEXTCH . . . . . .    BYTE EXTERNAL(58)         326 
      4               NIL. . . . . . . .    LITERALLY
    150  0000H     1  NO . . . . . . . .    BYTE BASED(PTR2)          152 
     11               NOMOD. . . . . . .    LITERALLY       369 
    147  0000H     1  NOOPER . . . . . .    BYTE EXTERNAL(61)
      8               NOOVERCOUNT. . . .    LITERALLY
      8               NOOVERRIDEBIT. . .    LITERALLY
     13               NOPARAND . . . . .    LITERALLY
     16               NORANGE. . . . . .    LITERALLY
      3               NUMBER . . . . . .    LITERALLY       252 
     16               NUMBERRANGE. . . .    LITERALLY       256 
      7               OAND . . . . . . .    LITERALLY
      7               OEQ. . . . . . . .    LITERALLY
    147  0006H     2  OFFSET . . . . . .    WORD MEMBER(OPERANDS)
      7               OGE. . . . . . . .    LITERALLY
      7               OGT. . . . . . . .    LITERALLY
      7               OLAST. . . . . . .    LITERALLY
      7               OLE. . . . . . . .    LITERALLY
      7               OLENGTH. . . . . .    LITERALLY
      7               OLT. . . . . . . .    LITERALLY
      7               OMOD . . . . . . .    LITERALLY
      7               ONE. . . . . . . .    LITERALLY
      7               ONOT . . . . . . .    LITERALLY
      7               OOFFSET. . . . . .    LITERALLY
PL/M-86 COMPILER    CODEMACRO MODULE 2                                           10/5/81    PAGE  13


      7               OOR. . . . . . . .    LITERALLY
    124  0000H        OPENHEX. . . . . .    PROCEDURE EXTERNAL(40) STACK=0000H
    122  0000H        OPENINCLUDE. . . .    PROCEDURE EXTERNAL(39) STACK=0000H
    126  0000H        OPENPRINT. . . . .    PROCEDURE EXTERNAL(41) STACK=0000H
    120  0000H        OPENSOURCE . . . .    PROCEDURE EXTERNAL(38) STACK=0000H
    128  0000H        OPENSYMBOL . . . .    PROCEDURE EXTERNAL(42) STACK=0000H
    147  0000H    36  OPERANDS . . . . .    STRUCTURE ARRAY(4) EXTERNAL(62)
      8               OPERANDSTRUC . . .    LITERALLY       147 
      3               OPERATOR . . . . .    LITERALLY
      7               OPTR . . . . . . .    LITERALLY
      7               OSEG . . . . . . .    LITERALLY
      7               OSHL . . . . . . .    LITERALLY
      7               OSHORT . . . . . .    LITERALLY
      7               OSHR . . . . . . .    LITERALLY
      7               OTYPE. . . . . . .    LITERALLY
    107  0000H        OUTHEXBYTE . . . .    PROCEDURE EXTERNAL(33) STACK=0000H
    110  0000H        OUTPRINTBYTE . . .    PROCEDURE EXTERNAL(34) STACK=0000H
    113  0000H        OUTSYMBOLBYTE. . .    PROCEDURE EXTERNAL(35) STACK=0000H
     57  0000H        OUTTEXT. . . . . .    PROCEDURE EXTERNAL(15) STACK=0000H
      7               OXOR . . . . . . .    LITERALLY
    339  032BH   213  PARDESCRROUT . . .    PROCEDURE STACK=001CH          398 
    148  005EH    80  PARNAME. . . . . .    BYTE ARRAY(80)       153  155  379  382 
      6               PCODEMACRO . . . .    LITERALLY
      6               PCSEG. . . . . . .    LITERALLY
      6               PDB. . . . . . . .    LITERALLY
      6               PDBIT. . . . . . .    LITERALLY
      6               PDD. . . . . . . .    LITERALLY
      6               PDSEG. . . . . . .    LITERALLY
      6               PDW. . . . . . . .    LITERALLY
      6               PEJECT . . . . . .    LITERALLY
      6               PEND . . . . . . .    LITERALLY
      6               PENDIF . . . . . .    LITERALLY
      6               PENDM. . . . . . .    LITERALLY
      6               PEQU . . . . . . .    LITERALLY
      6               PESEG. . . . . . .    LITERALLY
      6               PIF. . . . . . . .    LITERALLY
      6               PIFLIST. . . . . .    LITERALLY
      6               PINCLUDE . . . . .    LITERALLY
      6               PLIST. . . . . . .    LITERALLY
      6               PMODRM . . . . . .    LITERALLY
    148  0002H     2  PMPT . . . . . . .    WORD       148  340  341  342  343  379 
      6               PNOIFLIST. . . . .    LITERALLY
      6               PNOLIST. . . . . .    LITERALLY
      6               PNOSEGFIX. . . . .    LITERALLY
      6               PORG . . . . . . .    LITERALLY
      6               PPAGESIZE. . . . .    LITERALLY
      6               PPAGEWIDTH . . . .    LITERALLY
      6               PRB. . . . . . . .    LITERALLY
     13               PREFIXAND. . . . .    LITERALLY
     14               PREFIXON . . . . .    LITERALLY
      6               PRELB. . . . . . .    LITERALLY
      6               PRELW. . . . . . .    LITERALLY
      2               PROC . . . . . . .    LITERALLY        20   22   24   27   30   33   36
                                              39   42   45   48   51   72   75   84   87   90
                                              93   95   97   99  102  105  107  110  113  116
                                             118  120  122  124  126  128  130  132  134  136
                                             138  140  142  145  149  161  170  184  195  202
PL/M-86 COMPILER    CODEMACRO MODULE 2                                           10/5/81    PAGE  14


                                             214  226  245  249  250  303  308  331  335  339
                                             376  388  396  404 
      6               PRS. . . . . . . .    LITERALLY
      6               PRW. . . . . . . .    LITERALLY
      6               PSEGFIX. . . . . .    LITERALLY
      3               PSEUDO . . . . . .    LITERALLY
      6               PSIMFORM . . . . .    LITERALLY
      6               PSSEG. . . . . . .    LITERALLY
     63  0000H     2  PT . . . . . . . .    WORD PARAMETER        64 
      6               PTITLE . . . . . .    LITERALLY
    228  000AH     2  PTR. . . . . . . .    WORD       229  230  237 
    149  0006H     2  PTR. . . . . . . .    WORD PARAMETER AUTOMATIC       150  153 
     42  0000H     2  PTR. . . . . . . .    WORD PARAMETER        43 
    149  0004H     2  PTR2 . . . . . . .    WORD PARAMETER AUTOMATIC       150  152 
    202  0138H    44  PUTB . . . . . . .    PROCEDURE PUBLIC STACK=0004H        247  265  333
                                             337 
    250  021DH   168  PUTRANGE . . . . .    PROCEDURE STACK=0010H          306  311  318 
    214  0164H    47  PUTW . . . . . . .    PROCEDURE PUBLIC STACK=0004H
      5               RAH. . . . . . . .    LITERALLY       291 
      5               RAL. . . . . . . .    LITERALLY       287 
     16               RANGEAND . . . . .    LITERALLY
    249  0203H    26  RANGEROUT. . . . .    PROCEDURE STACK=0018H          373 
     15               RANGESPECBIT . . .    LITERALLY
     15               RANGESPECCOUNT . .    LITERALLY
     16               RANGETYPEAND . . .    LITERALLY
      5               RAX. . . . . . . .    LITERALLY       279 
      5               RBH. . . . . . . .    LITERALLY       294 
      5               RBL. . . . . . . .    LITERALLY       290 
      5               RBP. . . . . . . .    LITERALLY       284 
      5               RBX. . . . . . . .    LITERALLY       282 
      5               RCH. . . . . . . .    LITERALLY       292 
      5               RCL. . . . . . . .    LITERALLY       288 
      5               RCS. . . . . . . .    LITERALLY       296 
      5               RCX. . . . . . . .    LITERALLY       280 
      5               RDH. . . . . . . .    LITERALLY       293 
      5               RDI. . . . . . . .    LITERALLY       286 
      5               RDL. . . . . . . .    LITERALLY       289 
      5               RDS. . . . . . . .    LITERALLY       298 
      5               RDX. . . . . . . .    LITERALLY       281 
      2               REENT. . . . . . .    LITERALLY
      3               REG. . . . . . . .    LITERALLY       186  196 
     16               REGISTERRANGE. . .    LITERALLY       271 
    245  01F6H    13  REGISTERROUT . . .    PROCEDURE STACK=000AH          279  280  281  282
                                             283  284  285  286  287  288  289  290  291  292
                                             293  294  295  296  297  298 
      5               RES. . . . . . . .    LITERALLY       295 
     39  0000H     2  RESULT . . . . . .    WORD PARAMETER        40 
     30  0000H     2  RESULT . . . . . .    WORD PARAMETER        31 
     24  0000H     2  RESULT . . . . . .    WORD PARAMETER        25 
     45  0000H     2  RETURNPTR. . . . .    WORD PARAMETER        46 
    132  0000H        REWINDSOURCE . . .    PROCEDURE EXTERNAL(44) STACK=0000H
      7               RIGHTBRACKET . . .    LITERALLY
     17               RIGHTPAR . . . . .    LITERALLY       319 
      5               RSI. . . . . . . .    LITERALLY       285 
      5               RSP. . . . . . . .    LITERALLY       283 
      5               RSS. . . . . . . .    LITERALLY       297 
     81  0000H     2  S. . . . . . . . .    WORD PARAMETER        82 
PL/M-86 COMPILER    CODEMACRO MODULE 2                                           10/5/81    PAGE  15


     54  0000H     2  S. . . . . . . . .    WORD PARAMETER        55 
     95  0000H        SCAN . . . . . . .    PROCEDURE EXTERNAL(28) STACK=0000H       301  317
                                             325  329  344  349  371  393  401 
     93  0000H        SCANINIT . . . . .    PROCEDURE EXTERNAL(27) STACK=0000H
     17               SECOND . . . . . .    LITERALLY       318 
      8               SEGMBIT. . . . . .    LITERALLY
      8               SEGMCOUNT. . . . .    LITERALLY
    147  0004H     2  SEGMENT. . . . . .    WORD MEMBER(OPERANDS)
      8               SEGTYPEBIT . . . .    LITERALLY
      8               SEGTYPECOUNT . . .    LITERALLY
    147  0003H     1  SFLAG. . . . . . .    BYTE MEMBER(OPERANDS)
     16               SINGLERANGE. . . .    LITERALLY       305 
     97  0000H        SKIPRESTOFLINE . .    PROCEDURE EXTERNAL(29) STACK=0000H
    102  0000H        SKIPUNTIL. . . . .    PROCEDURE BYTE EXTERNAL(31) STACK=0000H
     36  0000H     2  SOURCE . . . . . .    WORD PARAMETER        37 
      2               SPACE. . . . . . .    LITERALLY
      3               SPEC . . . . . . .    LITERALLY
     10               SPECA. . . . . . .    LITERALLY       351 
     10               SPECC. . . . . . .    LITERALLY       352 
     10               SPECD. . . . . . .    LITERALLY       353 
     10               SPECE. . . . . . .    LITERALLY       354 
     99  0000H        SPECIALTOKEN . . .    PROCEDURE BYTE EXTERNAL(30) STACK=0000H
    331  0311H    13  SPECLETTERROUT . .    PROCEDURE STACK=000AH          351  352  353  354
                                             355  356  357  358 
     10               SPECM. . . . . . .    LITERALLY       355 
     10               SPECR. . . . . . .    LITERALLY       356 
     10               SPECS. . . . . . .    LITERALLY       357 
     10               SPECX. . . . . . .    LITERALLY       358 
    303  02C5H    23  SRANGE . . . . . .    PROCEDURE STACK=0014H          328 
     12               SSOVER . . . . . .    LITERALLY
     39  0000H     2  STRADR . . . . . .    WORD PARAMETER        40 
     30  0000H     2  STRADR . . . . . .    WORD PARAMETER        31 
     27  0000H     2  STRADR . . . . . .    WORD PARAMETER        28 
     24  0000H     2  STRADR . . . . . .    WORD PARAMETER        25 
      3               STRING . . . . . .    LITERALLY
      2               STRUC. . . . . . .    LITERALLY       147 
    147  0002H     1  STYPE. . . . . . .    BYTE MEMBER(OPERANDS)
     36  0000H     2  SYMBADR. . . . . .    WORD PARAMETER        37 
     33  0000H     2  SYMBADR. . . . . .    WORD PARAMETER        34 
     22  0000H        SYMBINIT . . . . .    PROCEDURE EXTERNAL(3) STACK=0000H
      3               SYMBOL . . . . . .    LITERALLY
      8               SYMBOLHEAD . . . .    LITERALLY
      8               SYMBOLSTRUC. . . .    LITERALLY       147 
     20  0000H        SYMBTERMINATE. . .    PROCEDURE EXTERNAL(2) STACK=0000H
     57  0000H     2  T. . . . . . . . .    WORD PARAMETER        58 
      2               TAB. . . . . . . .    LITERALLY
    172  0008H     4  TABLE. . . . . . .    BYTE ARRAY(4) DATA        173  174  176 
    163  0000H     8  TABLE. . . . . . .    BYTE ARRAY(8) DATA        164  165 
    404  0496H    35  TERMINATECMROUT. .    PROCEDURE PUBLIC STACK=000EH
     60  0000H     2  TEXTADR. . . . . .    WORD PARAMETER        61 
      2               THENDO . . . . . .    LITERALLY       176  205  217  230  252  254  259
                                             269  312  319  345  405  409 
    250  0004H     1  TIME . . . . . . .    BYTE PARAMETER AUTOMATIC       251  254  269 
    102  0000H     1  TOK. . . . . . . .    BYTE PARAMETER       103 
     99  0000H     1  TOK. . . . . . . .    BYTE PARAMETER       100 
    147  0000H     4  TOKEN. . . . . . .    STRUCTURE EXTERNAL(57)         186  189  191  193
                                             196  198  200  252  259  265  389  397 
PL/M-86 COMPILER    CODEMACRO MODULE 2                                           10/5/81    PAGE  16


      2               TRUE . . . . . . .    LITERALLY       154  207  208  219  220  243  261
                                             276  314  321  347  360  394  411  412 
    147  0000H     1  TYPE . . . . . . .    BYTE MEMBER(TOKEN)        186  196  252  389  397
      8               TYPEBIT. . . . . .    LITERALLY
     48  0000H        TYPECALC . . . . .    PROCEDURE BYTE EXTERNAL(12) STACK=0000H
      8               TYPECOUNT. . . . .    LITERALLY
      3               UDEFSYMB . . . . .    LITERALLY
    226  0193H    99  UPDATECMLISTS. . .    PROCEDURE BYTE STACK=000AH          409 
     78  0000H        UPPER. . . . . . .    PROCEDURE BYTE EXTERNAL(22) STACK=0000H
     48  0000H     2  VAL. . . . . . . .    WORD PARAMETER        49 
    147  0002H     2  VALUE. . . . . . .    WORD MEMBER(TOKEN)        193  200  259  265 
      3               VARIABLE . . . . .    LITERALLY
    214  0004H     2  W. . . . . . . . .    WORD PARAMETER AUTOMATIC       215  223 
      4               WRD. . . . . . . .    LITERALLY
     51  0000H        WRDTEST. . . . . .    PROCEDURE BYTE EXTERNAL(13) STACK=0000H



MODULE INFORMATION:

     CODE AREA SIZE     = 04B9H   1209D
     CONSTANT AREA SIZE = 000CH     12D
     VARIABLE AREA SIZE = 011BH    283D
     MAXIMUM STACK SIZE = 0020H     32D
     936 LINES READ
     0 PROGRAM ERROR(S)

END OF PL/M-86 COMPILATION
