home *** CD-ROM | disk | FTP | other *** search
/ Frostbyte's 1980s DOS Shareware Collection / floppyshareware.zip / floppyshareware / USCX / DOSUT-05.ZIP / STRUCT.MAC < prev    next >
Text File  |  1984-02-03  |  3KB  |  210 lines

  1. .xlist
  2. ;
  3. ;  COPYRIGHT @ 1982
  4. ;    Jim Holtman
  5. ;
  6. ;  Structured Control MACROS for the Assembler
  7. ;
  8. .$on=1
  9. .cnt=1
  10. .lvl=0
  11. .$top=1
  12. xopsyn    macro    op1,op2
  13. @&op1    equ    op2
  14. @&op2    equ    op1
  15.     endm
  16.  
  17.     xopsyn    jbe,ja
  18.     xopsyn    jae,jb
  19.     xopsyn    jc,jnc
  20.     xopsyn    je,jne
  21.     xopsyn    jz,jnz
  22.     xopsyn    jg,jle
  23.     xopsyn    jge,jl
  24.     xopsyn    jno,jo
  25.     xopsyn    jpo,jpe
  26.     xopsyn    jns,js
  27.     purge    xopsyn
  28. ; create label
  29. .$lbl    macro    id,num
  30.                     id&num:
  31.     endm
  32.  
  33. .popdo    macro
  34.     if    .$top lt 1
  35.       %out stack overflow
  36.     else
  37.       .$top = .$top-1
  38.       .$get %.$top,.dold
  39.     endif
  40.     endm
  41.  
  42. .$get    macro    entry,value
  43. value = .&entry
  44.     endm
  45.  
  46. .$put    macro    entry,value
  47. .&entry = value
  48.     endm
  49.  
  50. .pushdo macro    x
  51.     ifnb    <x>
  52.       x = .cnt
  53.       .cnt = .cnt+1
  54.     endif
  55.     .$put    %.$top,.dold
  56.     .$top = .$top+1
  57.     endm
  58.  
  59. .$br    macro    type,id,label,long
  60.     local    lab
  61.     ifnb    <long>
  62.                     j&type    lab
  63.                     jmp    id&label
  64.                     lab:
  65.     else
  66.                     @j&type  id&label
  67.     endif
  68.     endm
  69.  
  70.  
  71. .doo    macro    cond,long
  72.     .pushdo .dold
  73.     .lvl = .lvl+1
  74.     .$br    cond,d@,%.dold,long
  75.     endm
  76.  
  77. .endif    macro
  78.     .popdo
  79.     .$lbl    d@,%.dold
  80.     .lvl = .lvl-1
  81.     endm
  82.  
  83. .if    macro    arg1,cond,arg2,long
  84.     ifb    <arg2>
  85.       .doo    arg1,cond
  86.     else
  87.                     cmp    arg1,arg2
  88.       .doo    cond,long
  89.     endif
  90.     endm
  91.  
  92. .ifs    macro    p1,p2,long
  93.                     test    p1,p2
  94.     .if    nz,long
  95.     endm
  96.  
  97. .ifc    macro    p1,p2,long
  98.                     test    p1,p2
  99.     .if    z,long
  100.     endm
  101.  
  102. .else    macro    long
  103.     .doif = .cnt
  104.     .cnt = .cnt+1
  105.     ifnb    <long>
  106.       .$jmp d@,%.doif
  107.     else
  108.       .$jmp <short d@>,%.doif
  109.     endif
  110.     .endif
  111.     .lvl = .lvl+1
  112.     .dold = .doif
  113.     .pushdo
  114.     endm
  115.  
  116. .$jmp    macro    id,num
  117.                     jmp    id&num
  118.     endm
  119.  
  120. .dowhl    macro    p1,cond,p2,long
  121.     ifnb    <p2>
  122.       .$do    long
  123.       .if    <p1>,cond,<p2>,long
  124.     else
  125.       .$do    cond
  126.       .if    p1,cond
  127.     endif
  128.     endm
  129.  
  130. .enddo    macro
  131.     .popdo
  132.     .doif = .dold
  133.     .popdo
  134.     .xxtemp = .dold and 8000h
  135.     if .xxtemp eq 0
  136.       .$jmp <short d@>,%.dold
  137.     else
  138.       .dold = .dold and 7fffh
  139.       .$jmp d@,%.dold
  140.     endif
  141.     .lvl = .lvl-1
  142.     .$lbl d@,%.doif
  143.     endm
  144.  
  145. check$    macro
  146.     if .$top ne 1
  147.       %out stack not empty
  148.     endif
  149.     if .lvl ne 0
  150.       %out nesting level mismatch
  151.     endif
  152.     endm
  153.  
  154. .$do    macro    long
  155.     .pushdo .dold
  156.     ifnb    <long>
  157.       .xxtemp = .$top-1
  158.       .$get %.xxtemp,.dold
  159.       .$put %.xxtemp,<.dold or 8000h>
  160.     endif
  161.     .xxtemp = .dold and 7fffh
  162.     .$lbl d@,%.xxtemp
  163.     endm
  164.  
  165. .repeat macro
  166.     .$do
  167.     .lvl = .lvl+1
  168.     endm
  169.  
  170. .until    macro    p1,cond,p2,long
  171.     ifidn    <p1>,<loop>
  172.       .popdo
  173.       .$loop loop&cond,d@,%.dold
  174.     else
  175.       ifnb <p2>
  176.                     cmp p1,p2
  177.         .popdo
  178.         .$br cond,d@,%.dold,long
  179.       else
  180.         .popdo
  181.         .$br p1,d@,%.dold,cond
  182.       endif
  183.     endif
  184.     .lvl = .lvl-1
  185.     endm
  186.  
  187. .$loop    macro    type,id,num
  188.                     type    id&num
  189.     endm
  190.  
  191. @pop    macro    parm
  192.     irp    @@pop,<parm>
  193.     ifnb    <@@pop>
  194.     pop    @@pop
  195.     endif
  196.     endm
  197.     endm
  198.  
  199. @save    macro    p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12
  200.     irp    @@save,<p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12>
  201.     ifnb    <@@save>
  202.     push    @@save
  203.     endif
  204.     endm
  205. @restore macro
  206.     @pop    <p12,p11,p10,p9,p8,p7,p6,p5,p4,p3,p2,p1>
  207.     endm
  208.     endm
  209. .list
  210. nb    <