home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l010 / 5.ddi / C5.ARC / LANGUAGE.LIB < prev    next >
Encoding:
Text File  |  1989-12-20  |  8.8 KB  |  603 lines

  1. c     equ  0
  2. turbo     equ  1
  3. basic     equ  2
  4. exe     equ  3
  5.  
  6. ifdef c_type
  7.  
  8.     language  equ  c
  9.  
  10. else
  11. ifdef turbo_type
  12.  
  13.     language  equ  turbo
  14.  
  15. else
  16. ifdef basic_type
  17.  
  18.     language  equ  basic
  19.  
  20. else
  21. ifdef exe_type
  22.  
  23.     language  equ  exe
  24.  
  25. endif
  26. endif
  27. endif
  28. endif
  29.  
  30. ifdef language
  31.  
  32.  
  33. ife language - c
  34.  
  35.     _END_PROG       macro
  36.      END
  37.     endm
  38.  
  39.     _BBX_PROC       macro .label, .mov_data
  40.  
  41.      ifdifi <.mov_data>,<.declare_stack>
  42.  
  43.      public    _&.label
  44.      _&.label  proc      far
  45.  
  46.      endif
  47.  
  48.      ifdifi <.mov_data>,<.nothing>
  49.  
  50.            restore_stack_reg = 1
  51.  
  52.            push      bp
  53.            mov         bp,sp
  54.            push      di
  55.            push      si
  56.            push      ds
  57.            push      es
  58.  
  59.           ifdifi <.mov_data>,<.no_data>
  60.            mov         ax,DGROUP
  61.            mov         ds,ax
  62.           endif
  63.  
  64.      else
  65.            restore_stack_reg = 0
  66.      endif
  67.  
  68.     endm
  69.  
  70.     _BBX_ENDP       macro .label
  71.      _&.label  endp
  72.     endm
  73.  
  74.     _PUBLIC   macro    .label
  75.     endm
  76.  
  77.     _BASIC_STRING  macro
  78.     endm
  79.  
  80.     _DATA_SEG       equ    <DGROUP>
  81.  
  82.     _BBX_START_DATA    macro
  83.  
  84.      _DATA       SEGMENT WORD PUBLIC 'DATA'
  85.      DGROUP    GROUP    _DATA
  86.  
  87.      bbx_data_declared   equ  1
  88.  
  89.             endm
  90.  
  91.  
  92.     _BBX_END_DATA    macro
  93.  
  94.      _DATA       ENDS
  95.  
  96.             endm
  97.  
  98.     _BBX_START_CODE    macro
  99.  
  100.      BBX_COMMON_TEXT  SEGMENT WORD PUBLIC 'CODE'
  101.  
  102.            ifdef     bbx_data_declared
  103.            assume cs:BBX_COMMON_TEXT, DS:DGROUP
  104.            else
  105.            assume cs:BBX_COMMON_TEXT, DS:BBX_COMMON_TEXT
  106.            endif
  107.  
  108.             endm
  109.  
  110.  
  111.     _BBX_END_CODE    macro
  112.  
  113.      BBX_COMMON_TEXT  ENDS
  114.  
  115.             endm
  116.  
  117.  
  118.  
  119.     _setup_stack   macro
  120.  
  121.            push      bp
  122.            mov         bp,sp
  123.            push      di
  124.            push      si
  125.            push      ds
  126.            push      es
  127.  
  128.            endm
  129.  
  130.  
  131.     _restore_stack macro     .pop_value
  132.  
  133.            pop         es
  134.            pop         ds
  135.            pop         si
  136.            pop         di
  137.            pop         bp
  138.  
  139.      ifdef .pop_value
  140.           if return_and_pop
  141.            ret
  142.           else
  143.            ret         .pop_value
  144.           endif
  145.      else
  146.           if1
  147.            %out WARNING!!!  NO POP VALUE SUPPLIED!!!
  148.           endif
  149.            ret
  150.      endif
  151.  
  152.            endm
  153.  
  154.  
  155.     REVERSE_ORDER    equ  1           ; parameters are passed in reverse order
  156.     RETURN_AND_POP    equ  1           ; pop upon returning
  157.     BBX_LANGUAGE_VALUE    equ  1
  158.     LEA_NECESSARY    equ  1           ; strings must be lea-ed
  159.  
  160. endif
  161.  
  162.  
  163. ife language - turbo
  164.  
  165.     _END_PROG       macro
  166.            END
  167.     endm
  168.  
  169.     _BBX_PROC       macro .label, .mov_data
  170.  
  171.      ifdifi <.mov_data>,<.declare_stack>
  172.  
  173.      public    .label
  174.      .label    proc      far
  175.  
  176.      endif
  177.  
  178.      ifdifi <.mov_data>,<.nothing>
  179.            restore_stack_reg = 1
  180.  
  181.            push      bp
  182.            mov         bp,sp
  183.            push      ds
  184.            push      es
  185.  
  186.           ifdifi <.mov_data>,<.no_data>
  187.            mov         ax,data
  188.            mov         ds,ax
  189.           endif
  190.      else
  191.            restore_stack_reg = 0
  192.      endif
  193.  
  194.     endm
  195.  
  196.     _BBX_ENDP       macro .label
  197.      .label    endp
  198.     endm
  199.  
  200.  
  201.     _PUBLIC   macro    .label
  202.     endm
  203.  
  204.     _BASIC_STRING  macro
  205.     endm
  206.  
  207.     _DATA_SEG       equ    <data>
  208.  
  209.     _BBX_START_DATA    macro
  210.  
  211.      DATA       segment word public
  212.  
  213.      bbx_data_declared   equ  1
  214.  
  215.             endm
  216.  
  217.  
  218.     _BBX_END_DATA    macro
  219.  
  220.      DATA       ends
  221.  
  222.             endm
  223.  
  224.     _BBX_START_CODE    macro
  225.  
  226.      CODE       segment byte public
  227.  
  228.            ifdef     bbx_data_declared
  229.            assume cs:CODE, ds:DATA
  230.            else
  231.            assume cs:CODE, ds:CODE
  232.            endif
  233.  
  234.             endm
  235.  
  236.  
  237.     _BBX_END_CODE    macro
  238.  
  239.      CODE       ends
  240.  
  241.             endm
  242.  
  243.  
  244.  
  245.  
  246.     _setup_stack   macro
  247.  
  248.            push      bp
  249.            mov         bp,sp
  250.            push      ds
  251.            push      es
  252.            cld
  253.  
  254.            endm
  255.  
  256.  
  257.     _restore_stack macro     .pop_value
  258.  
  259.            pop         es
  260.            pop         ds
  261.            pop         bp
  262.  
  263.      ifdef .pop_value
  264.           if return_and_pop
  265.            ret
  266.           else
  267.            ret         .pop_value
  268.           endif
  269.      else
  270.           if1
  271.            %out WARNING!!!  NO POP VALUE SUPPLIED!!!
  272.           endif
  273.            ret
  274.      endif
  275.  
  276.            endm
  277.  
  278.  
  279.     REVERSE_ORDER    equ  0           ; parameters are passed normally
  280.     RETURN_AND_POP    equ  0           ; do not pop upon returning
  281.     BBX_LANGUAGE_VALUE    equ  2
  282.     LEA_NECESSARY    equ  0           ; strings do not have to be lea-ed
  283.  
  284. endif
  285.  
  286.  
  287. ife language - basic
  288.  
  289.     _END_PROG       macro
  290.      END
  291.     endm
  292.  
  293.     _PUBLIC   macro    .label
  294.     endm
  295.  
  296.     _DATA_SEG       equ    <DGROUP>
  297.  
  298.     _BBX_PROC       macro .label, .mov_data
  299.  
  300.      ifdifi <.mov_data>,<.declare_stack>
  301.  
  302.      public    .label
  303.      .label    proc      far
  304.  
  305.      endif
  306.  
  307.      ifdifi <.mov_data>,<.nothing>
  308.            restore_stack_reg = 1
  309.  
  310.            push      bp
  311.            mov         bp,sp
  312.            push      ds
  313.            push      es
  314.  
  315.           ifdifi <.mov_data>,<.no_data>
  316.            mov         ax,DGROUP
  317.            mov         ds,ax
  318.           endif
  319.      else
  320.            restore_stack_reg = 0
  321.      endif
  322.     endm
  323.  
  324.     _BBX_ENDP       macro .label
  325.      .label    endp
  326.     endm
  327.  
  328.  
  329.     _RESTORE_STACK macro     .param_length,.return_reg,.return_address
  330.  
  331.      ifnb <.return_reg>
  332.            les         di,[bp+.return_address]
  333.            mov         es:[di],.return_reg
  334.      endif
  335.  
  336.      if restore_stack_reg
  337.            pop         es
  338.            pop         ds
  339.            pop         bp
  340.      endif
  341.  
  342.      ifnb <.param_length>
  343.            ret         .param_length
  344.      else
  345.            ret
  346.      endif
  347.  
  348.     endm
  349.  
  350.     _BASIC_STRING  macro     .seg, .reg
  351.           mov    .reg,.seg:[.reg+2]
  352.     endm
  353.  
  354.     _BBX_START_DATA    macro
  355.  
  356.      DATA       SEGMENT WORD PUBLIC 'DATA'
  357.      DGROUP    GROUP    DATA
  358.  
  359.      bbx_data_declared   equ  1
  360.  
  361.             endm
  362.  
  363.  
  364.     _BBX_END_DATA    macro
  365.  
  366.      DATA       ENDS
  367.  
  368.             endm
  369.  
  370.     _BBX_START_CODE    macro
  371.  
  372.      BBX_COMMON_TEXT  SEGMENT WORD PUBLIC 'CODE'
  373.  
  374.            ifdef     bbx_data_declared
  375.            assume cs:BBX_COMMON_TEXT, DS:DGROUP
  376.            else
  377.            assume cs:BBX_COMMON_TEXT, DS:BBX_COMMON_TEXT
  378.            endif
  379.  
  380.  
  381.             endm
  382.  
  383.  
  384.     _BBX_END_CODE    macro
  385.  
  386.      BBX_COMMON_TEXT  ENDS
  387.  
  388.             endm
  389.  
  390.  
  391.     _setup_stack   macro
  392.  
  393.            push      bp
  394.            mov         bp,sp
  395.            push      ds
  396.            push      es
  397.            cld
  398.  
  399.            endm
  400.  
  401.  
  402.     _restore_stack macro     .pop_value
  403.  
  404.            pop         es
  405.            pop         ds
  406.            pop         bp
  407.  
  408.      ifdef .pop_value
  409.           if return_and_pop
  410.            ret
  411.           else
  412.            ret         .pop_value
  413.           endif
  414.      else
  415.           if1
  416.            %out WARNING!!!  NO POP VALUE SUPPLIED!!!
  417.           endif
  418.            ret
  419.      endif
  420.  
  421.            endm
  422.  
  423.  
  424.     REVERSE_ORDER    equ  0           ; parameters are passed normally
  425.     RETURN_AND_POP    equ  0           ; do not pop upon returning
  426.     BBX_LANGUAGE_VALUE    equ  3
  427.     LEA_NECESSARY    equ  1           ; strings have to be lea-ed
  428.  
  429. endif
  430.  
  431.  
  432. ife language - exe
  433.  
  434.     _END_PROG       macro
  435.            END
  436.     endm
  437.  
  438.     _BBX_PROC       macro .label, .mov_data
  439.  
  440.      ifdifi <.mov_data>,<.declare_stack>
  441.  
  442.      public    .label
  443.      .label    proc      far
  444.  
  445.      endif
  446.  
  447.      ifdifi <.mov_data>,<.nothing>
  448.  
  449.            restore_stack_reg = 1
  450.  
  451.            push      bp
  452.            mov         bp,sp
  453.            push      ds
  454.  
  455.           ifdifi <.mov_data>,<.no_data>
  456.            mov         ax,data
  457.            mov         ds,ax
  458.           endif
  459.  
  460.      else
  461.            restore_stack_reg = 0
  462.      endif
  463.  
  464.     endm
  465.  
  466.     _BBX_ENDP       macro .label
  467.      .label    endp
  468.     endm
  469.  
  470.     _PUBLIC   macro    .label
  471.      public    .label
  472.     endm
  473.  
  474.     _BASIC_STRING  macro
  475.     endm
  476.  
  477.     _DATA_SEG       equ    <data>
  478.  
  479.     _BBX_START_DATA    macro
  480.  
  481.      LAYOUT_COMMON    SEGMENT BYTE PUBLIC 'LAYOUT_COMMON_CODE'
  482.      LAYOUT_COMMON    ENDS
  483.  
  484.      data       segment byte public 'DATA'
  485.  
  486.      bbx_data_declared   equ  1
  487.  
  488.             endm
  489.  
  490.  
  491.     _BBX_END_DATA    macro
  492.  
  493.      data       ends
  494.  
  495.             endm
  496.  
  497.     _BBX_START_CODE    macro
  498.  
  499.      LAYOUT_COMMON    SEGMENT BYTE PUBLIC 'LAYOUT_COMMON_CODE'
  500.  
  501.             ifdef bbx_data_declared
  502.             assume cs:LAYOUT_COMMON, ds:data
  503.             else
  504.             assume cs:LAYOUT_COMMON, ds:LAYOUT_COMMON
  505.             endif
  506.  
  507.             endm
  508.  
  509.  
  510.     _BBX_END_CODE    macro
  511.  
  512.      LAYOUT_COMMON    ENDS
  513.  
  514.             endm
  515.  
  516.  
  517.     _setup_stack   macro
  518.  
  519.            push      bp
  520.            mov         bp,sp
  521.            push      ds
  522.  
  523.            endm
  524.  
  525.  
  526.     _restore_stack macro     .pop_value
  527.  
  528.            pop         ds
  529.            pop         bp
  530.  
  531.      ifdef .pop_value
  532.           if return_and_pop
  533.            ret
  534.           else
  535.            ret         .pop_value
  536.           endif
  537.      else
  538.           if1
  539.            %out WARNING!!!  NO POP VALUE SUPPLIED!!!
  540.           endif
  541.            ret
  542.      endif
  543.  
  544.            endm
  545.  
  546.  
  547.     REVERSE_ORDER    equ  0           ; parameters are passed in reverse order
  548.     RETURN_AND_POP    equ  1           ; do not pop upon returning
  549.     BBX_LANGUAGE_VALUE    equ  2
  550.     LEA_NECESSARY    equ  0           ; strings do not have to be lea-ed
  551.  
  552. endif
  553. endif
  554.  
  555.  
  556.  
  557.  
  558. language_type       equ    6
  559. bbxc_base       equ    6+2
  560.  
  561. _return_value       macro     .return_address,.return_reg
  562.  
  563.           les    di,.return_address
  564.           _BASIC_STRING es,di
  565.           mov    es:[di],.return_reg
  566.  
  567.            endm
  568.  
  569.  
  570. _BBX_ICALL    MACRO    .label,.pop_val
  571.  
  572.     ifdef language
  573.      ife language - exe
  574.  
  575.      mov       bp,_&.label + _SET_DS_DATA_FLAG
  576.      int       0F4H
  577.      add       sp,.pop_val
  578.  
  579.      else
  580.  
  581.      CALL       .label
  582.           if return_and_pop
  583.            add         sp,.pop_val
  584.           endif
  585.  
  586.      endif
  587.     endif
  588.  
  589.      endm
  590.  
  591.  
  592. _mov_addr     macro    .reg,.label
  593.  
  594.     if lea_necessary
  595.           lea    .reg,.label
  596.     else
  597.           mov    .reg,offset .label
  598.     endif
  599.           endm
  600.  
  601.  
  602.  
  603.