home *** CD-ROM | disk | FTP | other *** search
- c equ 0
- turbo equ 1
- basic equ 2
- exe equ 3
-
- ifdef c_type
-
- language equ c
-
- else
- ifdef turbo_type
-
- language equ turbo
-
- else
- ifdef basic_type
-
- language equ basic
-
- else
- ifdef exe_type
-
- language equ exe
-
- endif
- endif
- endif
- endif
-
- ifdef language
-
-
- ife language - c
-
- _END_PROG macro
- END
- endm
-
- _BBX_PROC macro .label, .mov_data
-
- ifdifi <.mov_data>,<.declare_stack>
-
- public _&.label
- _&.label proc far
-
- endif
-
- ifdifi <.mov_data>,<.nothing>
-
- restore_stack_reg = 1
-
- push bp
- mov bp,sp
- push di
- push si
- push ds
- push es
-
- ifdifi <.mov_data>,<.no_data>
- mov ax,DGROUP
- mov ds,ax
- endif
-
- else
- restore_stack_reg = 0
- endif
-
- endm
-
- _BBX_ENDP macro .label
- _&.label endp
- endm
-
- _PUBLIC macro .label
- endm
-
- _BASIC_STRING macro
- endm
-
- _DATA_SEG equ <DGROUP>
-
- _BBX_START_DATA macro
-
- _DATA SEGMENT WORD PUBLIC 'DATA'
- DGROUP GROUP _DATA
-
- bbx_data_declared equ 1
-
- endm
-
-
- _BBX_END_DATA macro
-
- _DATA ENDS
-
- endm
-
- _BBX_START_CODE macro
-
- BBX_COMMON_TEXT SEGMENT WORD PUBLIC 'CODE'
-
- ifdef bbx_data_declared
- assume cs:BBX_COMMON_TEXT, DS:DGROUP
- else
- assume cs:BBX_COMMON_TEXT, DS:BBX_COMMON_TEXT
- endif
-
- endm
-
-
- _BBX_END_CODE macro
-
- BBX_COMMON_TEXT ENDS
-
- endm
-
-
-
- _setup_stack macro
-
- push bp
- mov bp,sp
- push di
- push si
- push ds
- push es
-
- endm
-
-
- _restore_stack macro .pop_value
-
- pop es
- pop ds
- pop si
- pop di
- pop bp
-
- ifdef .pop_value
- if return_and_pop
- ret
- else
- ret .pop_value
- endif
- else
- if1
- %out WARNING!!! NO POP VALUE SUPPLIED!!!
- endif
- ret
- endif
-
- endm
-
-
- REVERSE_ORDER equ 1 ; parameters are passed in reverse order
- RETURN_AND_POP equ 1 ; pop upon returning
- BBX_LANGUAGE_VALUE equ 1
- LEA_NECESSARY equ 1 ; strings must be lea-ed
-
- endif
-
-
- ife language - turbo
-
- _END_PROG macro
- END
- endm
-
- _BBX_PROC macro .label, .mov_data
-
- ifdifi <.mov_data>,<.declare_stack>
-
- public .label
- .label proc far
-
- endif
-
- ifdifi <.mov_data>,<.nothing>
- restore_stack_reg = 1
-
- push bp
- mov bp,sp
- push ds
- push es
-
- ifdifi <.mov_data>,<.no_data>
- mov ax,data
- mov ds,ax
- endif
- else
- restore_stack_reg = 0
- endif
-
- endm
-
- _BBX_ENDP macro .label
- .label endp
- endm
-
-
- _PUBLIC macro .label
- endm
-
- _BASIC_STRING macro
- endm
-
- _DATA_SEG equ <data>
-
- _BBX_START_DATA macro
-
- DATA segment word public
-
- bbx_data_declared equ 1
-
- endm
-
-
- _BBX_END_DATA macro
-
- DATA ends
-
- endm
-
- _BBX_START_CODE macro
-
- CODE segment byte public
-
- ifdef bbx_data_declared
- assume cs:CODE, ds:DATA
- else
- assume cs:CODE, ds:CODE
- endif
-
- endm
-
-
- _BBX_END_CODE macro
-
- CODE ends
-
- endm
-
-
-
-
- _setup_stack macro
-
- push bp
- mov bp,sp
- push ds
- push es
- cld
-
- endm
-
-
- _restore_stack macro .pop_value
-
- pop es
- pop ds
- pop bp
-
- ifdef .pop_value
- if return_and_pop
- ret
- else
- ret .pop_value
- endif
- else
- if1
- %out WARNING!!! NO POP VALUE SUPPLIED!!!
- endif
- ret
- endif
-
- endm
-
-
- REVERSE_ORDER equ 0 ; parameters are passed normally
- RETURN_AND_POP equ 0 ; do not pop upon returning
- BBX_LANGUAGE_VALUE equ 2
- LEA_NECESSARY equ 0 ; strings do not have to be lea-ed
-
- endif
-
-
- ife language - basic
-
- _END_PROG macro
- END
- endm
-
- _PUBLIC macro .label
- endm
-
- _DATA_SEG equ <DGROUP>
-
- _BBX_PROC macro .label, .mov_data
-
- ifdifi <.mov_data>,<.declare_stack>
-
- public .label
- .label proc far
-
- endif
-
- ifdifi <.mov_data>,<.nothing>
- restore_stack_reg = 1
-
- push bp
- mov bp,sp
- push ds
- push es
-
- ifdifi <.mov_data>,<.no_data>
- mov ax,DGROUP
- mov ds,ax
- endif
- else
- restore_stack_reg = 0
- endif
- endm
-
- _BBX_ENDP macro .label
- .label endp
- endm
-
-
- _RESTORE_STACK macro .param_length,.return_reg,.return_address
-
- ifnb <.return_reg>
- les di,[bp+.return_address]
- mov es:[di],.return_reg
- endif
-
- if restore_stack_reg
- pop es
- pop ds
- pop bp
- endif
-
- ifnb <.param_length>
- ret .param_length
- else
- ret
- endif
-
- endm
-
- _BASIC_STRING macro .seg, .reg
- mov .reg,.seg:[.reg+2]
- endm
-
- _BBX_START_DATA macro
-
- DATA SEGMENT WORD PUBLIC 'DATA'
- DGROUP GROUP DATA
-
- bbx_data_declared equ 1
-
- endm
-
-
- _BBX_END_DATA macro
-
- DATA ENDS
-
- endm
-
- _BBX_START_CODE macro
-
- BBX_COMMON_TEXT SEGMENT WORD PUBLIC 'CODE'
-
- ifdef bbx_data_declared
- assume cs:BBX_COMMON_TEXT, DS:DGROUP
- else
- assume cs:BBX_COMMON_TEXT, DS:BBX_COMMON_TEXT
- endif
-
-
- endm
-
-
- _BBX_END_CODE macro
-
- BBX_COMMON_TEXT ENDS
-
- endm
-
-
- _setup_stack macro
-
- push bp
- mov bp,sp
- push ds
- push es
- cld
-
- endm
-
-
- _restore_stack macro .pop_value
-
- pop es
- pop ds
- pop bp
-
- ifdef .pop_value
- if return_and_pop
- ret
- else
- ret .pop_value
- endif
- else
- if1
- %out WARNING!!! NO POP VALUE SUPPLIED!!!
- endif
- ret
- endif
-
- endm
-
-
- REVERSE_ORDER equ 0 ; parameters are passed normally
- RETURN_AND_POP equ 0 ; do not pop upon returning
- BBX_LANGUAGE_VALUE equ 3
- LEA_NECESSARY equ 1 ; strings have to be lea-ed
-
- endif
-
-
- ife language - exe
-
- _END_PROG macro
- END
- endm
-
- _BBX_PROC macro .label, .mov_data
-
- ifdifi <.mov_data>,<.declare_stack>
-
- public .label
- .label proc far
-
- endif
-
- ifdifi <.mov_data>,<.nothing>
-
- restore_stack_reg = 1
-
- push bp
- mov bp,sp
- push ds
-
- ifdifi <.mov_data>,<.no_data>
- mov ax,data
- mov ds,ax
- endif
-
- else
- restore_stack_reg = 0
- endif
-
- endm
-
- _BBX_ENDP macro .label
- .label endp
- endm
-
- _PUBLIC macro .label
- public .label
- endm
-
- _BASIC_STRING macro
- endm
-
- _DATA_SEG equ <data>
-
- _BBX_START_DATA macro
-
- LAYOUT_COMMON SEGMENT BYTE PUBLIC 'LAYOUT_COMMON_CODE'
- LAYOUT_COMMON ENDS
-
- data segment byte public 'DATA'
-
- bbx_data_declared equ 1
-
- endm
-
-
- _BBX_END_DATA macro
-
- data ends
-
- endm
-
- _BBX_START_CODE macro
-
- LAYOUT_COMMON SEGMENT BYTE PUBLIC 'LAYOUT_COMMON_CODE'
-
- ifdef bbx_data_declared
- assume cs:LAYOUT_COMMON, ds:data
- else
- assume cs:LAYOUT_COMMON, ds:LAYOUT_COMMON
- endif
-
- endm
-
-
- _BBX_END_CODE macro
-
- LAYOUT_COMMON ENDS
-
- endm
-
-
- _setup_stack macro
-
- push bp
- mov bp,sp
- push ds
-
- endm
-
-
- _restore_stack macro .pop_value
-
- pop ds
- pop bp
-
- ifdef .pop_value
- if return_and_pop
- ret
- else
- ret .pop_value
- endif
- else
- if1
- %out WARNING!!! NO POP VALUE SUPPLIED!!!
- endif
- ret
- endif
-
- endm
-
-
- REVERSE_ORDER equ 0 ; parameters are passed in reverse order
- RETURN_AND_POP equ 1 ; do not pop upon returning
- BBX_LANGUAGE_VALUE equ 2
- LEA_NECESSARY equ 0 ; strings do not have to be lea-ed
-
- endif
- endif
-
-
-
-
- language_type equ 6
- bbxc_base equ 6+2
-
- _return_value macro .return_address,.return_reg
-
- les di,.return_address
- _BASIC_STRING es,di
- mov es:[di],.return_reg
-
- endm
-
-
- _BBX_ICALL MACRO .label,.pop_val
-
- ifdef language
- ife language - exe
-
- mov bp,_&.label + _SET_DS_DATA_FLAG
- int 0F4H
- add sp,.pop_val
-
- else
-
- CALL .label
- if return_and_pop
- add sp,.pop_val
- endif
-
- endif
- endif
-
- endm
-
-
- _mov_addr macro .reg,.label
-
- if lea_necessary
- lea .reg,.label
- else
- mov .reg,offset .label
- endif
- endm
-
-
-