home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / utils / asmutl / m80str11.lbr / STRUCT.LZB / STRUCT.LIB
Text File  |  1988-02-16  |  3KB  |  181 lines

  1.  .Z80
  2.  .XLIST
  3. @iflvl aset 0
  4. @brlvl aset 0
  5. @caslvl aset 0
  6. @getput macro symbol,val
  7. symbol aset val
  8.  endm
  9. @push macro stk,val
  10.  .ifndf stk,0
  11.  if stk eq 0ffffh
  12. +++++++ @push_overflow stk
  13.  else
  14. stk aset stk+1
  15.  @getput stk%stk,val
  16.  endif
  17.  endm
  18. @pop macro stk,symbol
  19.  .ifndf stk,0
  20.  if stk eq 0
  21. +++++++ @pop_underflow stk
  22.  else
  23.  @getput symbol,stk%stk
  24. stk aset stk-1
  25.  endif
  26.  endm
  27. @jump macro a1,a2
  28.  if nul a2
  29.  jp a1
  30.  else
  31.  jp a1,a2
  32.  endif
  33.  endm
  34. @ijump macro a1,a2,a3
  35.  if nul a2
  36.  jp a1&a3
  37.  exitm
  38.  endif
  39.  ifidn <a1>,<nz>
  40.  jp z,a2&a3
  41.  exitm
  42.  endif
  43.  ifidn <a1>,<z>
  44.  jp nz,a2&a3
  45.  exitm
  46.  endif
  47.  ifidn <a1>,<nc>
  48.  jp c,a2&a3
  49.  exitm
  50.  endif
  51.  ifidn <a1>,<c>
  52.  jp nc,a2&a3
  53.  exitm
  54.  endif
  55.  ifidn <a1>,<po>
  56.  jp pe,a2&a3
  57.  exitm
  58.  endif
  59.  ifidn <a1>,<pe>
  60.  jp po,a2&a3
  61.  exitm
  62.  endif
  63.  ifidn <a1>,<p>
  64.  jp m,a2&a3
  65.  exitm
  66.  endif
  67.  ifidn <a1>,<m>
  68.  jp p,a2&a3
  69.  endif
  70.  endm
  71. @lbl macro a1,a2,a3
  72.  if nul a2
  73. a1&a3:
  74.  else
  75.  if1
  76.  ifndef a1
  77. a1&a3:
  78.  else
  79. a2&a3:
  80.  endif
  81.  else
  82.  ifndef a2
  83. a1&a3:
  84.  else
  85. a2&a3:
  86.  endif
  87.  endif
  88.  endif
  89.  endm
  90. .ifndf macro var,val
  91.  ifndef var
  92. var aset val
  93.  endif
  94.  endm
  95. .if macro cond
  96.  if nul cond
  97. +++++++ if_condition_not_specified
  98.  else
  99.  @push @if,@iflvl
  100.  @ijump cond,@ei1%@iflvl
  101. @iflvl aset @iflvl+1
  102.  endif
  103.  endm
  104. .else macro
  105.  @pop @if,@gp
  106.  @push @if,@gp
  107.  @ijump @ei2%@gp
  108.  @lbl @ei1%@gp
  109.  endm
  110. .endif macro
  111.  @pop @if,@gp
  112.  @lbl @ei1%@gp,@ei2%@gp
  113.  endm
  114. .do macro
  115.  @push @br,@brlvl
  116.  @lbl @ibr%@brlvl
  117. @brlvl aset @brlvl+1
  118.  endm
  119. .while macro cond
  120.  if nul cond
  121. +++++++ while_condition_not_specified
  122.  else
  123.  @pop @br,@gp
  124.  @push @br,@gp
  125.  @ijump cond,@ebr%@gp
  126.  endif
  127.  endm
  128. .until macro cond
  129.  if nul cond
  130. +++++++ until_condition_not_specified
  131.  else
  132.  @pop @br,@gp
  133.  @ijump cond,@ibr%@gp
  134.  @lbl @ebr%@gp
  135.  endif
  136.  endm
  137. .enddo macro
  138.  @pop @br,@gp
  139.  @ijump @ibr%@gp
  140.  @lbl @ebr%@gp
  141.  endm
  142. .switch macro
  143.  @push @br,@brlvl
  144. @brlvl aset @brlvl+1
  145.  @push @case,@caslvl
  146. @caslvl aset @caslvl+1
  147.  endm
  148. .case macro
  149.  @pop @br,@gp
  150.  @push @br,@gp
  151.  @lbl @cas%@gp,,%@caslvl
  152. @caslvl aset @caslvl+1
  153.  endm
  154. .cond macro cond
  155.  if nul cond
  156. +++++++ cond_condition_not_specified
  157.  else
  158.  @pop @br,@gp
  159.  @push @br,@gp
  160.  @ijump cond,@cas%@gp,%@caslvl
  161.  endif
  162.  endm
  163. .otherwise macro
  164.  .case
  165.  endm
  166. .endsw macro
  167.  @pop @br,@gp
  168.  @lbl @ebr%@gp
  169.  @pop @case,@caslvl
  170.  endm
  171. .break macro cond
  172.  @pop @br,@gp
  173.  @push @br,@gp
  174.  if nul cond
  175.  @jump @ebr%@gp
  176.  else
  177.  @jump cond,@ebr%@gp
  178.  endif
  179.  endm
  180.  .LIST
  181.