home *** CD-ROM | disk | FTP | other *** search
/ Computer Select (Limited Edition) / Computer Select.iso / dobbs / v17n03 / oopasm.exe / MACROS.MAC < prev    next >
Encoding:
Text File  |  1990-12-11  |  6.4 KB  |  428 lines

  1. pushData    MACRO    registers
  2.     IRP        reg,<registers>
  3.     push        reg
  4.     ENDM
  5.     ENDM
  6.  
  7.  
  8.  
  9. popData        MACRO    registers
  10.     IRP        reg,<registers>
  11.     pop        reg
  12.     ENDM
  13.     ENDM
  14.  
  15.  
  16.  
  17. eq        MACRO    arg1,arg2,arg3,arg4
  18.     cmp        arg1,arg2
  19.     jz        arg3
  20.     IFNB        <arg4>
  21.     jmp        arg4
  22.     ENDIF
  23.     ENDM
  24.  
  25.  
  26.  
  27. neq        MACRO    arg1,arg2,arg3,arg4
  28.     cmp        arg1,arg2
  29.     jnz        arg3
  30.     IFNB        <arg4>
  31.     jmp        arg4
  32.     ENDIF
  33.     ENDM
  34.  
  35.  
  36.  
  37. null        MACRO    arg1,arg2,arg3
  38.     cmp        arg1,Nil
  39.     jz        arg2
  40.     IFNB        <arg3>
  41.     jmp        arg3
  42.     ENDIF
  43.     ENDM
  44.  
  45.  
  46.  
  47. identity    MACRO    arg1,arg2,arg3
  48.     cmp        arg1,Nil
  49.     jnz        arg2
  50.     IFNB        <arg3>
  51.     jmp        arg3
  52.     ENDIF
  53.     ENDM
  54.  
  55.  
  56.  
  57. zero        MACRO    arg1,arg2,arg3
  58.     cmp        arg1,0
  59.     jz        arg2
  60.     IFNB        <arg3>
  61.     jmp        arg3
  62.     ENDIF
  63.     ENDM
  64.  
  65.  
  66.  
  67. notZero        MACRO    arg1,arg2,arg3
  68.     cmp        arg1,0
  69.     jnz        arg2
  70.     IFNB        <arg3>
  71.     jmp        arg3
  72.     ENDIF
  73.     ENDM
  74.  
  75.  
  76.  
  77. lessThan    MACRO    arg1,arg2,arg3,arg4
  78.     cmp        arg1,arg2
  79.     jb        arg3
  80.     IFNB        <arg4>
  81.     jmp        arg4
  82.     ENDIF
  83.     ENDM
  84.  
  85.  
  86.  
  87. moreThan    MACRO    arg1,arg2,arg3,arg4
  88.     cmp        arg1,arg2
  89.     ja        arg3
  90.     IFNB        <arg4>
  91.     jmp        arg4
  92.     ENDIF
  93.     ENDM
  94.  
  95.  
  96.  
  97. lessThanEq    MACRO    arg1,arg2,arg3,arg4
  98.     cmp        arg1,arg2
  99.     jbe        arg3
  100.     IFNB        <arg4>
  101.     jmp        arg4
  102.     ENDIF
  103.     ENDM
  104.  
  105.  
  106.  
  107. moreThanEq    MACRO    arg1,arg2,arg3,arg4
  108.     cmp        arg1,arg2
  109.     jae        arg3
  110.     IFNB        <arg4>
  111.     jmp        arg4
  112.     ENDIF
  113.     ENDM
  114.  
  115.  
  116.  
  117. getStackArgs    MACRO    Regs
  118.     mov        bp,sp
  119.     X    =    8
  120.     IRP        Reg,<Regs>
  121.     mov        Reg,[bp+X]
  122.     X    =    X+2
  123.     ENDM
  124.     ENDM
  125.  
  126.  
  127.  
  128. setStackArgs    MACRO    Regs
  129.     mov        bp,sp
  130.     X    =    8
  131.     IRP        Reg,<Regs>
  132.     mov        WORD PTR[bp+X],Reg
  133.     X    =    X+2
  134.     ENDM
  135.     ENDM
  136.  
  137.  
  138.  
  139. setSegs    MACRO    arg
  140.     mov        ax,seg arg
  141.     mov        ds,ax
  142.     mov        es,ax
  143.     ENDM
  144.  
  145.  
  146.  
  147. exit        MACRO
  148.     mov    ax,4c00h
  149.     int     21h            ;MSDOS interrupt
  150.     ENDM
  151.  
  152.  
  153.  
  154. COMMENT    %
  155. ==============================================================================
  156. Defines a menu. Takes an object, and a list of menu items. It creates a table
  157. of ASCIIZ strings, and a table of pointers to those strings with an extra 
  158. empty word to be used for positional information.
  159.  
  160. =============================================================================%
  161. defMenu    MACRO    Obj,Items
  162.     X    =    0
  163.     IRP        Item,<Items>
  164.     _defMenu    Item,%X
  165.     X    =    X+1
  166.     ENDM
  167.  
  168. Obj&Menu    LABEL    WORD
  169.     X    =    0
  170.     IRP        Item,<Items>
  171.     defMenu_    Item,%X
  172.     X    =    X+1
  173.     ENDM
  174.     DW        Nil
  175.     ENDM
  176.  
  177.  
  178.  
  179. _defMenu    MACRO    Item,Cnt
  180.     P&Cnt    DB    Item,0
  181.     ENDM
  182.  
  183.  
  184.  
  185. defMenu_    MACRO    Item,Cnt
  186.        DW        00
  187.        DW        P&Cnt
  188.     ENDM
  189.  
  190.  
  191.  
  192. COMMENT    %
  193. ==============================================================================
  194. Defines a menu table. Takes an object, and a list of object, message pairs.
  195. It creates a table of these pairs, and a table of pointers to them with a 
  196. preceeding count word.
  197.  
  198. =============================================================================%
  199. defMenuTbl    MACRO    Obj,S0,S1,S2,S3,S4,S5,S6,S7,S8,S9
  200.         LOCAL    P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9
  201.  
  202.     P0    LABEL    WORD
  203.     makeTbl    S0
  204.     C0    =    X/2
  205.     IFNB    <S1>
  206.     P1    LABEL    WORD
  207.     makeTbl    S1
  208.     C1    =    X/2
  209.     IFNB    <S2>
  210.     P2    LABEL    WORD
  211.     makeTbl    S2
  212.     C2    =    X/2
  213.     IFNB    <S3>
  214.     P3    LABEL    WORD
  215.     makeTbl    S3
  216.     C3    =    X/2
  217.     IFNB    <S4>
  218.     P4    LABEL    WORD
  219.     makeTbl    S4
  220.     C4    =    X/2
  221.     IFNB    <S5>
  222.     P5    LABEL    WORD
  223.     makeTbl    S5
  224.     C5    =    X/2
  225.     IFNB    <S6>
  226.     P6    LABEL    WORD
  227.     makeTbl    S6
  228.     C6    =    X/2
  229.     IFNB    <S7>
  230.     P7    LABEL    WORD
  231.     makeTbl    S7
  232.     C7    =    X/2
  233.     IFNB    <S8>
  234.     P8    LABEL    WORD
  235.     makeTbl    S8
  236.     C8    =    X/2
  237.     IFNB    <S9>
  238.     P9    LABEL    WORD
  239.     makeTbl    S9
  240.     C9    =    X/2
  241.     ENDIF
  242.     ENDIF
  243.     ENDIF
  244.     ENDIF
  245.     ENDIF
  246.     ENDIF
  247.     ENDIF
  248.     ENDIF
  249.     ENDIF
  250.  
  251. Obj&MenuTbl    LABEL    WORD
  252.         DW    C0
  253.         DW    P0
  254.     IFNB    <S1>
  255.         DW    C1
  256.         DW    P1
  257.     IFNB    <S2>
  258.         DW    C2
  259.         DW    P2
  260.     IFNB    <S3>
  261.         DW    C3
  262.         DW    P3
  263.     IFNB    <S4>
  264.         DW    C4
  265.         DW    P4
  266.     IFNB    <S5>
  267.         DW    C5
  268.         DW    P5
  269.     IFNB    <S6>
  270.         DW    C6
  271.         DW    P6
  272.     IFNB    <S7>
  273.         DW    C7
  274.         DW    P7
  275.     IFNB    <S8>
  276.         DW    C8
  277.         DW    P8
  278.     IFNB    <S9>
  279.         DW    C9
  280.         DW    P9
  281.     ENDIF
  282.     ENDIF
  283.     ENDIF
  284.     ENDIF
  285.     ENDIF
  286.     ENDIF
  287.     ENDIF
  288.     ENDIF
  289.     ENDIF    
  290.     ENDM
  291.  
  292.  
  293.  
  294. makeTbl    MACRO    M0,M1,M2,M3,M4,M5,M6,M7,M8,M9
  295.     X    =    0
  296.     makeTbl_    M0,M1,M2,M3,M4,M5,M6,M7,M8,M9
  297.     ENDM
  298.  
  299.  
  300.  
  301. makeTbl_    MACRO    M0,M1,M2,M3,M4,M5,M6,M7,M8,M9
  302.     IFB    <M0>
  303.     EXITM
  304.     ENDIF
  305.         DW    M0
  306.     X    =    X+1
  307.     makeTbl_    M1,M2,M3,M4,M5,M6,M7,M8,M9
  308.     ENDM
  309.  
  310.  
  311.  
  312. COMMENT    %
  313. ==============================================================================
  314. Defines a dispatch table. Takes an object, and up to ten table entries. Each
  315. entry consists of an ASCII code, scan code, button status, upper row, 
  316. left column, lower row, right column, and followed by object, message pairs. 
  317.  
  318. =============================================================================%
  319. defDispTbl    MACRO    Obj,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15
  320.     Y    =    0
  321.     defOMTbls    0,<T0>,<T1>,<T2>,<T3>,<T4>,<T5>,<T6>,<T7>,<T8>,<T9>,<T10>,<T11>,<T12>,<T13>,<T14>,<T15>
  322.  
  323.     Obj&DispTbl    LABEL    WORD
  324.     Y    =    0
  325.     defASTbls    0,<T0>,<T1>,<T2>,<T3>,<T4>,<T5>,<T6>,<T7>,<T8>,<T9>,<T10>,<T11>,<T12>,<T13>,<T14>,<T15>
  326.     ENDM
  327.  
  328.  
  329.  
  330. defOMTbls    MACRO    Count,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15
  331.     IFB    <T0>
  332.     EXITM
  333.     ENDIF
  334.  
  335.     defOMTbl    %Y,<T0>
  336.     C&Count    =    (X-6)/2
  337.  
  338.     Y    =    Count+1
  339.     defOMTbls    %Y,<T1>,<T2>,<T3>,<T4>,<T5>,<T6>,<T7>,<T8>,<T9>,<T10>,<T11>,<T12>,<T13>,<T14>,<T15>
  340.     ENDM
  341.  
  342.  
  343.  
  344. defOMTbl    MACRO    Count,Tbl
  345.     IFB    <Tbl>
  346.     EXITM
  347.     ENDIF
  348.  
  349.     Q&Count    LABEL    WORD
  350.     X    =    0
  351.     IRP        Itm,<Tbl>
  352.     IF    X GT 6
  353.         DW    Itm
  354.     ENDIF
  355.     X    =    X+1
  356.     ENDM
  357.     ENDM
  358.  
  359.  
  360.  
  361. defASTbls    MACRO    Count,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15
  362.     IFB    <T0>
  363.     EXITM
  364.     ENDIF
  365.  
  366.     X    =    C&Count
  367.     defASTbl    %X,%Y,<T0>
  368.  
  369.     Y    =    Count+1
  370.     defASTbls    %Y,<T1>,<T2>,<T3>,<T4>,<T5>,<T6>,<T7>,<T8>,<T9>,<T10>,<T11>,<T12>,<T13>,<T14>,<T15>
  371.     ENDM
  372.  
  373.  
  374.  
  375. defASTbl    MACRO    Size,Count,Tbl
  376.     IFB    <Tbl>
  377.     EXITM
  378.     ENDIF
  379.  
  380.     X    =    0
  381.     IRP        Itm,<Tbl>
  382.     IF    X LT 7
  383.         DB    Itm
  384.     ENDIF
  385.     X    =    X+1
  386.     ENDM
  387.         DB    Size
  388.         DW    Q&Count
  389.     ENDM
  390.  
  391.  
  392.  
  393. COMMENT    %
  394. ==============================================================================
  395. Defines a slave table. Takes an object (master), and a list of objects 
  396. (slaves). Creates a table starting with a count, and followed by the slaves.
  397.  
  398. =============================================================================%
  399. defSlaveTbl    MACRO    Obj,Objs
  400.         LOCAL    ObjCnt
  401.  
  402.     Obj&SlaveTbl    LABEL    WORD
  403.         DW    ObjCnt
  404.     ObjCnt    =    0
  405.     IRP    Obj,<Objs>
  406.         DW    Obj
  407.     ObjCnt    =    ObjCnt+1
  408.     ENDM
  409.     ENDM
  410.  
  411.  
  412.  
  413. COMMENT    %
  414. ==============================================================================
  415. Iterates over the specified table executing the specified code.
  416.  
  417. =============================================================================%
  418. iterate    MACRO    Tbl,Cnt,Proc
  419.     LOCAL    irt1
  420.  
  421.     mov        cx,Wptr[Tbl]        ;Get loop count
  422. irt1:    add        Tbl,Cnt            ;Point to next entry
  423.     call        Proc            ;Execute procedure
  424.     loop        irt1
  425.     ENDM
  426.  
  427.  
  428.