nolist ;__________________________________________________________________________ ; ; FILE : NewDir.inc ; DATE : 22/05/01 ; LAST UPDATE : 05/02/05 ; ; DESCRIPTION : Some new / modified directives for MPASM. ; ; The main purpose is to allow a well indented listing ; when using directives. ; Have a look to this (stupid) exemple: ; ;i set 0 ; _set i To 0 ; ; ; while i < MAX ; while (i < MAX) ; ; ; if i & 1 ==> ; if (i & 1) ;ODD set TRUE ; _set ODD To TRUE ; else a little bit more ; else ;ODD set FALSE ; _set ODD To FALSE ; endif READABLE ; endif ; ; ;i += 1 ; _inc i ; ; ; endw ; endw; ; ; AUTHOR : FD ; TESTS : OK ;__________________________________________________________________________ ; ; ; Modified directives for MPASM. ; ;__________________________________________________________________________ #define _define #define #define _undefine #undefine #define _endif endif #define _ifndef ifndef #define _include include #define _error error #define _message messg ;-------------------------------------------------------------------------- _add macro name,value ;---- _set name, name + (value) endm ;-------------------------------------------------------------------------- _assert macro condition ;------- if !(condition) error " Assertion failure " endif endm ;-------------------------------------------------------------------------- _clear macro var ;------ _set var, 0 endm ;-------------------------------------------------------------------------- _dec macro var ;---- _set var, (var-1) endm ;-------------------------------------------------------------------------- _equ macro var, value ;---- var equ (value) endm ;-------------------------------------------------------------------------- _expand_level set 0 _expand macro value ;------- noexpand if (value != 0) _add _expand_level, value else _clear _expand_level endif if (_expand_level <= 0) exitm endif expand endm ;-------------------------------------------------------------------------- _inc macro var ;---- _set var, (var+1) endm ;-------------------------------------------------------------------------- _insert_label macro name ;------------- name endm ;-------------------------------------------------------------------------- _list_level set 0 _list macro value ;----- nolist if (value != 0) _add _list_level, value else _clear _list_level endif if (_list_level < 0) exitm endif list endm ;-------------------------------------------------------------------------- _max macro name, val1, val2 ;---- _set name, val1 if (val2 > val1) _set name, val2 endif endm ;-------------------------------------------------------------------------- _min macro name, val1, val2 ;---- _set name, val1 if (val2 < val1) _set name, val2 endif endm ;-------------------------------------------------------------------------- _set macro var, value ;---- var set (value) endm ;__________________________________________________________________________ _list 0