NASM 0.97
authorH. Peter Anvin <hpa@zytor.com>
Tue, 30 Apr 2002 20:53:16 +0000 (20:53 +0000)
committerH. Peter Anvin <hpa@zytor.com>
Tue, 30 Apr 2002 20:53:16 +0000 (20:53 +0000)
22 files changed:
Changes
Makefile.dj [new file with mode: 0644]
Makefile.lcc [new file with mode: 0644]
Readme
Wishlist
configure.in [new file with mode: 0644]
doc/nasmdoc.src
insns.bas
install-sh [new file with mode: 0755]
macros.bas
macros.c
makedist.sh [new file with mode: 0755]
nasm.h
nasmlib.c
ndisasm.c
outobj.c
outrdf.c
parser.c
preproc.c
rdoff/Makefile [deleted file]
rdoff/Makefile.sc
standard.mac

diff --git a/Changes b/Changes
index 242a96d..24f4bfe 100644 (file)
--- a/Changes
+++ b/Changes
@@ -129,8 +129,8 @@ be output when absolute labels were made global.
 
 Updates to RDOFF subdirectory, and changes to outrdf.c.
 
-0.95 not released yet
----------------------
+0.95 released July 1997
+-----------------------
 
 Fixed yet another ELF bug. This one manifested if the user relied on
 the default segment, and attempted to define global symbols without
@@ -242,8 +242,8 @@ Fixed the implementation of WRT, which was too restrictive in that
 you couldn't do `mov ax,[di+abc wrt dgroup]' because (di+abc) wasn't
 a relocatable reference.
 
-0.96 not released yet
----------------------
+0.96 released November 1997
+---------------------------
 
 Fixed a bug whereby, if `nasm sourcefile' would cause a filename
 collision warning and put output into `nasm.out', then `nasm
@@ -403,3 +403,42 @@ assembled differently. This is important since [ESI+EBP] and
 
 Added support for the PharLap OMF extension for 4096-byte segment
 alignment.
+
+0.97 released December 1997
+---------------------------
+
+This was entirely a bug-fix release to 0.96, which seems to have got
+cursed. Silly me.
+
+Fixed stupid mistake in OBJ which caused `MOV EAX,<constant>' to
+fail. Caused by an error in the `MOV EAX,<segment>' support.
+
+ndisasm hung at EOF when compiled with lcc on Linux because lcc on
+Linux somehow breaks feof(). ndisasm now does not rely on feof().
+
+A heading in the documentation was missing due to a markup error in
+the indexing. Fixed.
+
+Fixed failure to update all pointers on realloc() within extended-
+operand code in parser.c. Was causing wrong behaviour and seg faults
+on lines such as `dd 0.0,0.0,0.0,0.0,...'
+
+Fixed a subtle preprocessor bug whereby invoking one multi-line
+macro on the first line of the expansion of another, when the second
+had been invoked with a label defined before it, didn't expand the
+inner macro. 
+
+Added internal.doc back in to the distribution archives - it was
+missing in 0.96 *blush*
+
+Fixed bug causing 0.96 to be unable to assemble its own test files,
+specifically objtest.asm. *blush again*
+
+Fixed seg-faults and bogus error messages caused by mismatching
+%rep and %endrep within multi-line macro definitions.
+
+Fixed a problem with buffer overrun in OBJ, which was causing
+corruption at ends of long PUBDEF records.
+
+Separated DOS archives into main-program and documentation to reduce
+download size.
diff --git a/Makefile.dj b/Makefile.dj
new file mode 100644 (file)
index 0000000..6d932f3
--- /dev/null
@@ -0,0 +1,81 @@
+# host: dos
+# target: dos 32bit
+# Makefile for the Netwide Assembler
+#
+# The Netwide Assembler is copyright (C) 1996 Simon Tatham and
+# Julian Hall. All rights reserved. The software is
+# redistributable under the licence given in the file "Licence"
+# distributed in the NASM archive.
+
+# makefile designed for djgpp 2.xx
+# djgpp is GNU C compiler ported by mighty DJ Delorie
+# www.delorie.com and any simtel mirror
+
+# You may need to adjust these values.
+
+CC = gcc
+CFLAGS = -O2 -I.
+
+# You _shouldn't_ need to adjust anything below this line.
+
+.c.o:
+       $(CC) -c $(CFLAGS) $*.c
+
+NASM = nasm.o nasmlib.o float.o insnsa.o assemble.o labels.o \
+       parser.o outform.o outbin.o outaout.o outcoff.o outelf.o \
+       outobj.o outas86.o outrdf.o outdbg.o preproc.o listing.o \
+       eval.o
+
+NDISASM = ndisasm.o disasm.o sync.o nasmlib.o insnsd.o
+
+all: nasm.exe ndisasm.exe
+
+nasm.exe: $(NASM)
+       $(CC) -o $@ $(NASM)
+
+ndisasm.exe: $(NDISASM)
+       $(CC) -o $@ $(NDISASM)
+
+assemble.o: assemble.c nasm.h nasmlib.h assemble.h insns.h
+disasm.o: disasm.c nasm.h disasm.h sync.h insns.h names.c
+eval.o: eval.c eval.h nasm.h nasmlib.h
+float.o: float.c nasm.h
+insnsa.o: insnsa.c nasm.h insns.h
+insnsd.o: insnsd.c nasm.h insns.h
+labels.o: labels.c nasm.h nasmlib.h
+listing.o: listing.c nasm.h nasmlib.h listing.h
+nasm.o: nasm.c nasm.h nasmlib.h preproc.h parser.h assemble.h labels.h \
+ outform.h listing.h
+nasmlib.o: nasmlib.c nasm.h nasmlib.h
+ndisasm.o: ndisasm.c nasm.h nasmlib.h sync.h disasm.h
+outaout.o: outaout.c nasm.h nasmlib.h outform.h
+outas86.o: outas86.c nasm.h nasmlib.h outform.h
+outbin.o: outbin.c nasm.h nasmlib.h outform.h
+outcoff.o: outcoff.c nasm.h nasmlib.h outform.h
+outdbg.o: outdbg.c nasm.h nasmlib.h outform.h
+outelf.o: outelf.c nasm.h nasmlib.h outform.h
+outform.o: outform.c outform.h nasm.h
+outobj.o: outobj.c nasm.h nasmlib.h outform.h
+outrdf.o: outrdf.c nasm.h nasmlib.h outform.h
+parser.o: parser.c nasm.h nasmlib.h parser.h float.h names.c
+preproc.o: preproc.c nasm.h nasmlib.h macros.c
+sync.o: sync.c sync.h
+
+# These two source files are automagically generated from a single
+# instruction-table file by a Perl script. They're distributed,
+# though, so it isn't necessary to have Perl just to recompile NASM
+# from the distribution.
+
+insnsa.c insnsd.c: insns.dat insns.pl
+       perl insns.pl insns.dat
+
+# This source file is generated from the standard macros file
+# `standard.mac' by another Perl script. Again, it's part of the
+# standard distribution.
+
+macros.c: standard.mac macros.pl
+       perl macros.pl standard.mac
+
+clean:
+       rm -f *.o nasm ndisasm
+
diff --git a/Makefile.lcc b/Makefile.lcc
new file mode 100644 (file)
index 0000000..1f6fdcb
--- /dev/null
@@ -0,0 +1,110 @@
+# host: windows nt/95
+# target: windows nt/95
+# Makefile for the Netwide Assembler
+#
+# The Netwide Assembler is copyright (C) 1996 Simon Tatham and
+# Julian Hall. All rights reserved. The software is
+# redistributable under the licence given in the file "Licence"
+# distributed in the NASM archive.
+
+# makefile designed for lcc-win32
+# lcc-win32 is lcc (c compiler coded by guys from princeton uni)
+# ported to win32 by jacob navia
+# available at http://www.remcomp.com/lcc-win32/
+
+CFLAGS = -c -O -g2
+CC = lcc.exe $(CFLAGS)
+LFLAGS = -subsystem console -s
+LD = lcclnk.exe $(LFLAGS)
+OBJ = obj
+
+.c.${OBJ}:
+        $(CC) -o $@ $*.c
+
+NASM = nasm.${OBJ} nasmlib.${OBJ} float.${OBJ} insnsa.${OBJ} assemble.${OBJ} labels.${OBJ} \
+       parser.${OBJ} outform.${OBJ} outbin.${OBJ} outaout.${OBJ} outcoff.${OBJ} outelf.${OBJ} \
+       outobj.${OBJ} outas86.${OBJ} outrdf.${OBJ} outdbg.${OBJ} preproc.${OBJ} listing.${OBJ} \
+       eval.${OBJ}
+
+NDISASM = ndisasm.${OBJ} disasm.${OBJ} sync.${OBJ} nasmlib.${OBJ} insnsd.${OBJ}
+
+all: nasm ndisasm
+
+# linker response files
+# that may take long, too much spawning command.com :)
+NASM.LNK: makefile.lcc
+        echo nasm.$(OBJ) > NASM.LNK
+        echo nasmlib.$(OBJ) >> NASM.LNK
+        echo eval.$(OBJ) >> NASM.LNK
+        echo float.$(OBJ) >> NASM.LNK
+        echo insnsa.$(OBJ) >> NASM.LNK
+        echo assemble.$(OBJ) >> NASM.LNK
+        echo labels.$(OBJ) >> NASM.LNK
+        echo listing.$(OBJ) >> NASM.LNK
+        echo parser.$(OBJ) >> NASM.LNK
+        echo preproc.$(OBJ) >> NASM.LNK
+        echo outform.$(OBJ) >> NASM.LNK
+        echo outbin.$(OBJ) >> NASM.LNK
+        echo outaout.$(OBJ) >> NASM.LNK
+        echo outcoff.$(OBJ) >> NASM.LNK
+        echo outelf.$(OBJ) >> NASM.LNK
+        echo outobj.$(OBJ) >> NASM.LNK
+        echo outas86.$(OBJ) >> NASM.LNK
+        echo outrdf.$(OBJ) >> NASM.LNK
+        echo outdbg.$(OBJ) >> NASM.LNK
+
+NDISASM.LNK: makefile.lcc
+        echo ndisasm.$(OBJ) > NDISASM.LNK
+        echo disasm.$(OBJ) >> NDISASM.LNK
+        echo sync.$(OBJ) >> NDISASM.LNK
+        echo nasmlib.$(OBJ) >> NDISASM.LNK
+        echo insnsd.$(OBJ) >> NDISASM.LNK
+
+nasm: $(NASM) nasm.lnk
+        $(LD) -o nasm.exe @nasm.lnk
+
+ndisasm: $(NDISASM) ndisasm.lnk
+        $(LD) -o ndisasm.exe @ndisasm.lnk
+
+assemble.${OBJ}: assemble.c nasm.h nasmlib.h assemble.h insns.h
+disasm.${OBJ}: disasm.c nasm.h disasm.h sync.h insns.h names.c
+eval.${OBJ}: eval.c eval.h nasm.h nasmlib.h
+float.${OBJ}: float.c nasm.h
+insnsa.${OBJ}: insnsa.c nasm.h insns.h
+insnsd.${OBJ}: insnsd.c nasm.h insns.h
+labels.${OBJ}: labels.c nasm.h nasmlib.h
+listing.${OBJ}: listing.c nasm.h nasmlib.h listing.h
+nasm.${OBJ}: nasm.c nasm.h nasmlib.h preproc.h parser.h assemble.h labels.h \
+ outform.h listing.h
+nasmlib.${OBJ}: nasmlib.c nasm.h nasmlib.h
+ndisasm.${OBJ}: ndisasm.c nasm.h nasmlib.h sync.h disasm.h
+outaout.${OBJ}: outaout.c nasm.h nasmlib.h outform.h
+outas86.${OBJ}: outas86.c nasm.h nasmlib.h outform.h
+outbin.${OBJ}: outbin.c nasm.h nasmlib.h outform.h
+outcoff.${OBJ}: outcoff.c nasm.h nasmlib.h outform.h
+outdbg.${OBJ}: outdbg.c nasm.h nasmlib.h outform.h
+outelf.${OBJ}: outelf.c nasm.h nasmlib.h outform.h
+outform.${OBJ}: outform.c outform.h nasm.h
+outobj.${OBJ}: outobj.c nasm.h nasmlib.h outform.h
+outrdf.${OBJ}: outrdf.c nasm.h nasmlib.h outform.h
+parser.${OBJ}: parser.c nasm.h nasmlib.h parser.h float.h names.c
+preproc.${OBJ}: preproc.c nasm.h nasmlib.h macros.c
+sync.${OBJ}: sync.c sync.h
+
+# These two source files are automagically generated from a single
+# instruction-table file by a Perl script. They're distributed,
+# though, so it isn't necessary to have Perl just to recompile NASM
+# from the distribution.
+
+insnsa.c insnsd.c: insns.dat insns.pl
+       perl insns.pl insns.dat
+
+# This source file is generated from the standard macros file
+# `standard.mac' by another Perl script. Again, it's part of the
+# standard distribution.
+
+macros.c: standard.mac macros.pl
+       perl macros.pl standard.mac
+
+clean:
+        rm -f *.${OBJ} nasm.exe ndisasm.exe
diff --git a/Readme b/Readme
index 95ce9f1..11fb184 100644 (file)
--- a/Readme
+++ b/Readme
@@ -41,6 +41,13 @@ To rebuild the DOS sources, various makefiles are provided:
 - Makefile.wcw, also for Watcom C, compiling to a Win32 command-
   line application. Also contributed by Dominik Behr.
 
+- Makefile.dj, for DJGPP, compiling to a 32-bit extended DOS
+  executable. Contributed by Dominik Behr.
+
+- Makefile.lcc, for lcc-win32, compiling to a Win32 command line
+  application. (The lcc-win32 compiler and tools are available from
+  http://www.remcomp.com/lcc-win32/)
+
 I can't guarantee that all of those makefiles work, because I don't
 have all of those compilers. However, Makefile.dos and Makefile.vc
 work on my system, and so do Makefile.bor and Makefile.bc2.
index 17ef699..197b113 100644 (file)
--- a/Wishlist
+++ b/Wishlist
@@ -1,11 +1,17 @@
 NASM Wishlist
 =============
 
-- PUSH WORD EAX silently becomes PUSH EAX. Should warn.
+- forward-reference tracking is instruction-granular not operand-
+  granular. Bummer.
 
-- ndisasm hangs at eof.
+- see if BITS can be made to do anything sensible in obj (eg set the
+  default new-segment property to Use32).
 
-- missing heading in documentation - some subsect in chapter 4.
+- __DATE__, __TIME__, and text variants of __NASM_MAJOR__ and
+  __NASM_MINOR__.
+
+- Warn on TIMES combined with multi-line macros. TIMES gets applied
+  to first line only - should bring to users' attention.
 
 - Add support for lcc 4.0.
   * If-when this happens, remember to bump the `supported lcc
diff --git a/configure.in b/configure.in
new file mode 100644 (file)
index 0000000..b5fb0e1
--- /dev/null
@@ -0,0 +1,110 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT(nasm.c)
+
+dnl Check for broken VPATH handling on older NetBSD makes.
+AC_DEFUN(AC_PROG_MAKE_VPATHOK,
+[AC_MSG_CHECKING(whether ${MAKE-make} has sane VPATH handling)
+set dummy ${MAKE-make}; ac_make=`echo "[$]2" | sed 'y%./+-%__p_%'`
+AC_CACHE_VAL(ac_cv_prog_make_vpathok,
+[mkdir conftestdir
+cat > conftestdir/conftestmake <<\EOF
+VPATH = ..
+conftestfoo: conftestbar
+       @echo ac_make2temp=ok
+conftestbar: conftestbaz
+       @echo ac_maketemp=broken
+       @touch conftestbar
+EOF
+echo > conftestbaz # these two lines need to be...
+echo > conftestbar # ... in this order not the other
+changequote(, )dnl
+unset ac_maketemp
+unset ac_make2temp
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `cd conftestdir; ${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+changequote([, ])dnl
+if test -n "$ac_maketemp"; then
+  ac_cv_prog_make_vpathok=no
+else
+  if test -n "$ac_make2temp"; then
+    ac_cv_prog_make_vpathok=yes
+  else
+    ac_cv_prog_make_vpathok=no
+  fi
+fi
+rm -rf conftestdir
+rm -f conftestbar conftestbaz])dnl
+if test $ac_cv_prog_make_vpathok = yes; then
+  AC_MSG_RESULT(yes)
+else
+  AC_MSG_RESULT(no)
+fi
+])
+
+AC_PREFIX_PROGRAM(nasm)
+
+dnl Checks for programs.
+AC_PROG_CC
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+if test -f nasm.c; then
+  # we're building in the source dir, so we don't need this check at all
+  ac_cv_prog_make_vpathok=yes
+else
+  AC_PROG_MAKE_VPATHOK
+fi
+AC_PROG_INSTALL
+
+if test "$GCC" = "yes"; then
+  GCCFLAGS="-Wall -ansi -pedantic"
+else
+  GCCFLAGS=
+fi
+AC_SUBST(GCCFLAGS)
+
+dnl Checks for header files.
+AC_HEADER_STDC
+if test $ac_cv_header_stdc = no; then
+  AC_MSG_ERROR([NASM requires ANSI C header files to compile])
+fi
+
+AC_CHECK_HEADERS(limits.h)
+if test $ac_cv_header_limits_h = no; then
+  AC_MSG_ERROR([NASM requires '<limits.h>' to compile])
+fi
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+if test $ac_cv_c_const = no; then
+  AC_MSG_ERROR([NASM requires ANSI C (specifically, working "const")])
+fi
+
+AC_TYPE_SIZE_T
+if test $ac_cv_type_size_t = no; then
+  AC_MSG_ERROR([NASM requires ANSI C (specifically, "size_t")])
+fi
+
+dnl Checks for library functions.
+AC_FUNC_VPRINTF
+if test $ac_cv_func_vprintf = no; then
+  AC_MSG_ERROR([NASM requires ANSI C (specifically, "vprintf" and friends)])
+fi
+
+AC_CHECK_FUNCS(strcspn)
+if test $ac_cv_func_strcspn = no; then
+  AC_MSG_ERROR([NASM requires ANSI C (specifically, "strcspn")])
+fi
+
+AC_CHECK_FUNCS(strspn)
+if test $ac_cv_func_strspn = no; then
+  AC_MSG_ERROR([NASM requires ANSI C (specifically, "strspn")])
+fi
+
+if test $ac_cv_prog_make_vpathok = no; then
+  echo Copying generated srcs into build directory to compensate for VPATH breakage
+  if test ! -f insnsa.c; then cp -p ${srcdir}/insnsa.c .; fi
+  if test ! -f insnsd.c; then cp -p ${srcdir}/insnsd.c .; fi
+  if test ! -f macros.c; then cp -p ${srcdir}/macros.c .; fi
+fi
+
+AC_OUTPUT(Makefile rdoff/Makefile)
index 0f80266..2828c7f 100644 (file)
@@ -1411,6 +1411,19 @@ then no other definition of \c{foo} will be accepted: a macro with
 no parameters prohibits the definition of the same name as a macro
 \e{with} parameters, and vice versa.
 
+This doesn't prevent single-line macros being \e{redefined}: you can
+perfectly well define a macro with
+
+\c %define foo bar
+
+and then re-define it later in the same source file with
+
+\c %define foo baz
+
+Then everywhere the macro \c{foo} is invoked, it will be expanded
+according to the most recent definition. This is particularly useful
+when defining single-line macros with \c{%assign} (see \k{assign}).
+
 You can \i{pre-define} single-line macros using the `-d' option on
 the NASM command line: see \k{opt-d}.
 
@@ -1426,6 +1439,13 @@ parameters and have a numeric value. This value can be specified in
 the form of an expression, and it will be evaluated once, when the
 \c{%assign} directive is processed.
 
+Like \c{%define}, macros defined using \c{%assign} can be re-defined
+later, so you can do things like
+
+\c %assign i i+1
+
+to increment the numeric value of a macro.
+
 \c{%assign} is useful for controlling the termination of \c{%rep}
 preprocessor loops: see \k{rep} for an example of this. Another
 use for \c{%assign} is given in \k{16c} and \k{32c}.
@@ -1480,7 +1500,7 @@ things like
 \c           silly 'ab', string_ab  ; string_ab: db 'ab'
 \c           silly {13,10}, crlf    ; crlf:      db 13,10
 
-\S{mlmacover} \I{Overloading Multi-Line Macros}
+\S{mlmacover} \i{Overloading Multi-Line Macros}
 
 As with single-line macros, multi-line macros can be overloaded by
 defining the same macro name several times with different numbers of
index ea52bcd..36dc3e1 100644 (file)
--- a/insns.bas
+++ b/insns.bas
@@ -533,3 +533,4 @@ FUNCTION StrTrimRight$ (a$, b$) 'public
         StrTrimRight$ = LEFT$(a$, p)
 END FUNCTION
 
+\1a
\ No newline at end of file
diff --git a/install-sh b/install-sh
new file mode 100755 (executable)
index 0000000..ebc6691
--- /dev/null
@@ -0,0 +1,250 @@
+#! /bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission.  M.I.T. makes no representations about the
+# suitability of this software for any purpose.  It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+    case $1 in
+       -c) instcmd="$cpprog"
+           shift
+           continue;;
+
+       -d) dir_arg=true
+           shift
+           continue;;
+
+       -m) chmodcmd="$chmodprog $2"
+           shift
+           shift
+           continue;;
+
+       -o) chowncmd="$chownprog $2"
+           shift
+           shift
+           continue;;
+
+       -g) chgrpcmd="$chgrpprog $2"
+           shift
+           shift
+           continue;;
+
+       -s) stripcmd="$stripprog"
+           shift
+           continue;;
+
+       -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+           shift
+           continue;;
+
+       -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+           shift
+           continue;;
+
+       *)  if [ x"$src" = x ]
+           then
+               src=$1
+           else
+               # this colon is to work around a 386BSD /bin/sh bug
+               :
+               dst=$1
+           fi
+           shift
+           continue;;
+    esac
+done
+
+if [ x"$src" = x ]
+then
+       echo "install:  no input file specified"
+       exit 1
+else
+       true
+fi
+
+if [ x"$dir_arg" != x ]; then
+       dst=$src
+       src=""
+       
+       if [ -d $dst ]; then
+               instcmd=:
+       else
+               instcmd=mkdir
+       fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad 
+# if $src (and thus $dsttmp) contains '*'.
+
+       if [ -f $src -o -d $src ]
+       then
+               true
+       else
+               echo "install:  $src does not exist"
+               exit 1
+       fi
+       
+       if [ x"$dst" = x ]
+       then
+               echo "install:  no destination specified"
+               exit 1
+       else
+               true
+       fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+       if [ -d $dst ]
+       then
+               dst="$dst"/`basename $src`
+       else
+               true
+       fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+#  this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='   
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+       pathcomp="${pathcomp}${1}"
+       shift
+
+       if [ ! -d "${pathcomp}" ] ;
+        then
+               $mkdirprog "${pathcomp}"
+       else
+               true
+       fi
+
+       pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+       $doit $instcmd $dst &&
+
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+       if [ x"$transformarg" = x ] 
+       then
+               dstfile=`basename $dst`
+       else
+               dstfile=`basename $dst $transformbasename | 
+                       sed $transformarg`$transformbasename
+       fi
+
+# don't allow the sed command to completely eliminate the filename
+
+       if [ x"$dstfile" = x ] 
+       then
+               dstfile=`basename $dst`
+       else
+               true
+       fi
+
+# Make a temp file name in the proper directory.
+
+       dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+       $doit $instcmd $src $dsttmp &&
+
+       trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing.  If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+       $doit $rmcmd -f $dstdir/$dstfile &&
+       $doit $mvcmd $dsttmp $dstdir/$dstfile 
+
+fi &&
+
+
+exit 0
index cad02c3..89ba846 100644 (file)
@@ -173,3 +173,4 @@ FUNCTION StrTrimRight$ (a$, b$) 'public
         StrTrimRight$ = LEFT$(a$, p)
 END FUNCTION
 
+\1a
\ No newline at end of file
index e2c97ad..ea02959 100644 (file)
--- a/macros.c
+++ b/macros.c
@@ -2,7 +2,7 @@
 
 static char *stdmac[] = {
     "%define __NASM_MAJOR__ 0",
-    "%define __NASM_MINOR__ 96",
+    "%define __NASM_MINOR__ 97",
     "%define __FILE__",
     "%define __LINE__",
     "%define __SECT__",
diff --git a/makedist.sh b/makedist.sh
new file mode 100755 (executable)
index 0000000..5b7abfc
--- /dev/null
@@ -0,0 +1,70 @@
+#!/bin/sh
+
+MAJORVER=`grep NASM_MAJOR_VER nasm.h | head -1 | cut -f3 -d' '`
+MINORVER=`grep NASM_MINOR_VER nasm.h | head -1 | cut -f3 -d' '`
+VERSION="${MAJORVER}.${MINORVER}"
+DOSVERSION="${MAJORVER}${MINORVER}"
+NASM_TAR_GZ=dist/nasm-${VERSION}.tar.gz
+NASM_ZIP=dist/nasm${DOSVERSION}s.zip
+NASM_DOS_ZIP=dist/nasm${DOSVERSION}.zip
+NASM_DOC_ZIP=dist/nasm${DOSVERSION}d.zip
+
+if [ -d dist ]; then rm -rf dist; fi
+if [ -d nasm-${VERSION} ]; then rm -rf nasm-${VERSION}; fi
+if [ ! -d dist ]; then mkdir dist; fi
+if [ -f dist/nasm.tar.gz ]; then rm dist/nasm.tar.gz; fi
+mkdir nasm-${VERSION}
+(cd nasm-${VERSION}; ln -s ../* .;
+ rm -f nasm-${VERSION} dist Checklist GNUmakefile z*)
+find nasm-${VERSION}/ -follow -name GNUmakefile > tar-exclude
+find nasm-${VERSION}/ -follow -name RCS >> tar-exclude
+find nasm-${VERSION}/ -follow -name '*.exe' >> tar-exclude
+find nasm-${VERSION}/ -follow -name '*.uu' >> tar-exclude
+find nasm-${VERSION}/ -follow -name '*,v' >> tar-exclude
+for i in nasm-${VERSION}/doc/{nasmdoc.hpj,nasmdoc.rtf,nasmdoc.texi,Readme};
+  do echo $i; done >> tar-exclude
+tar chvfX dist/nasm-${VERSION}.tar tar-exclude nasm-${VERSION}
+rm -f tar-exclude
+tar tf dist/nasm-${VERSION}.tar | (echo nasm.doc; sed \
+  -e 's:^nasm-[^/]*/::' \
+  -e 's:/$::' \
+  -e '/install-sh/d' \
+  -e '/makedist\.sh/d' \
+  -e '/exasm\.zip/d' \
+  -e '/config/d' \
+  -e '/doc\/.*\.html/d' \
+  -e '/doc\/Readme/d' \
+  -e '/doc\/nasmdoc\.ps/d' \
+  -e '/doc\/nasmdoc\.txt/d' \
+  -e '/doc\/nasmdoc\.rtf/d' \
+  -e '/doc\/nasmdoc\.hpj/d' \
+  -e '/doc\/nasmdoc\.texi/d' \
+  -e '/doc\/nasmdoc\.hlp/d' \
+  -e '/doc\/nasm\.info/d' \
+  ) | sort > zipfiles
+sed \
+  -e '/^[^\/]*\.\(c\|h\|pl\|bas\|dat\)$/d' \
+  -e '/^doc\(\/.*\)\?/d' \
+  -e '/standard\.mac/d' \
+  -e '/Makefile/d' \
+  -e '/rdoff/d' \
+  < zipfiles > zipfiles.dos
+gzip -9 dist/nasm-${VERSION}.tar
+rm -rf nasm-${VERSION}
+ln -s doc/nasmdoc.src nasm.doc
+zip -l -k ${NASM_ZIP} `cat zipfiles`
+zip -k ${NASM_ZIP} *.exe misc/exasm.zip
+zip -l -k ${NASM_DOS_ZIP} `cat zipfiles.dos`
+zip -k ${NASM_DOS_ZIP} *.exe misc/exasm.zip
+rm -f nasm.doc
+(cd doc; zip -l -k ../${NASM_DOC_ZIP} \
+  Readme \
+  nasmdoc.src rdsrc.pl \
+  nasmdoc.txt \
+  nasmdoc.ps \
+  *.html
+ zip -k ../${NASM_DOC_ZIP} \
+  nasmdoc.hlp \
+  nasm.info)
+rm -f zipfiles zipfiles.dos
+echo Distributions complete.
diff --git a/nasm.h b/nasm.h
index 9f1fbc9..8dafac5 100644 (file)
--- a/nasm.h
+++ b/nasm.h
@@ -12,8 +12,8 @@
 #define NASM_NASM_H
 
 #define NASM_MAJOR_VER 0
-#define NASM_MINOR_VER 96
-#define NASM_VER "0.96"
+#define NASM_MINOR_VER 97
+#define NASM_VER "0.97"
 
 #ifndef NULL
 #define NULL 0
index bd671f5..4508fec 100644 (file)
--- a/nasmlib.c
+++ b/nasmlib.c
@@ -853,27 +853,34 @@ int is_really_simple (expr *vect) {
  * scalar, plus at most one segment-base, plus possibly a WRT).
  */
 int is_reloc (expr *vect) {
-    while (vect->type && !vect->value)
+    while (vect->type && !vect->value) /* skip initial value-0 terms */
        vect++;
-    if (!vect->type)
-       return 1;
-    if (vect->type < EXPR_SIMPLE)
+    if (!vect->type)                  /* trivially return TRUE if nothing */
+       return 1;                      /* is present apart from value-0s */
+    if (vect->type < EXPR_SIMPLE)      /* FALSE if a register is present */
        return 0;
-    if (vect->type == EXPR_SIMPLE) {
+    if (vect->type == EXPR_SIMPLE) {   /* skip over a pure number term... */
+       do {
+           vect++;
+       } while (vect->type && !vect->value);
+       if (!vect->type)               /* ...returning TRUE if that's all */
+           return 1;
+    }
+    if (vect->type == EXPR_WRT) {      /* skip over a WRT term... */
        do {
            vect++;
        } while (vect->type && !vect->value);
-       if (!vect->type)
+       if (!vect->type)               /* ...returning TRUE if that's all */
            return 1;
     }
-    if (vect->type != EXPR_WRT && vect->value != 0 && vect->value != 1)
+    if (vect->value != 0 && vect->value != 1)
        return 0;                      /* segment base multiplier non-unity */
-    do {
+    do {                              /* skip over _one_ seg-base term... */
        vect++;
-    } while (vect->type && (vect->type == EXPR_WRT || !vect->value));
-    if (!vect->type)
+    } while (vect->type && !vect->value);
+    if (!vect->type)                  /* ...returning TRUE if that's all */
        return 1;
-    return 0;
+    return 0;                         /* And return FALSE if there's more */
 }
 
 /*
index ffe6c12..90639e9 100644 (file)
--- a/ndisasm.c
+++ b/ndisasm.c
@@ -42,6 +42,7 @@ int main(int argc, char **argv) {
     int lenread, lendis;
     int autosync = FALSE;
     int bits = 16;
+    int eof = FALSE;
     int rn_error;
     long offset;
     FILE *fp;
@@ -191,6 +192,8 @@ int main(int argc, char **argv) {
        if (to_read > nextsync-offset-(p-q))
            to_read = nextsync-offset-(p-q);
        lenread = fread (p, 1, to_read, fp);
+       if (lenread == 0)
+           eof = TRUE;                /* help along systems with bad feof */
        p += lenread;
        if (offset == nextsync) {
            if (synclen) {
@@ -218,7 +221,7 @@ int main(int argc, char **argv) {
            p -= (q - buffer);
            q = buffer;
        }
-    } while (lenread > 0 || !feof(fp));
+    } while (lenread > 0 || !(eof || feof(fp)));
     fclose (fp);
     return 0;
 }
index 0a64c6a..f54d297 100644 (file)
--- a/outobj.c
+++ b/outobj.c
@@ -599,7 +599,8 @@ static void obj_out (long segto, void *data, unsigned long type,
            datacurr->lptr = obj_write_dword (datacurr->lptr, ldata);
        datacurr->nonempty = TRUE;
        rsize = size;
-       if (segment < SEG_ABS && segment % 2 && size == 4) {
+       if (segment < SEG_ABS && (segment != NO_SEG && segment % 2) &&
+           size == 4) {
            /*
             * This is a 4-byte segment-base relocation such as
             * `MOV EAX,SEG foo'. OBJ format can't actually handle
@@ -1519,7 +1520,7 @@ static void obj_write_file (void) {
        else
            rectype = PUBDEF;
        for (pub = seg->pubhead; pub; pub = pub->next) {
-           if (recptr - record + strlen(pub->name) > 1024) {
+           if (recptr - record + strlen(pub->name) + 7 > 1024) {
                if (any)
                    obj_record (rectype, record, recptr);
                recptr = record;
index 6b01c75..cde1327 100644 (file)
--- a/outrdf.c
+++ b/outrdf.c
@@ -221,6 +221,10 @@ static long rdf_section_names(char *name, int pass, int *bits)
 
 static void write_reloc_rec(struct RelocRec *r)
 {
+  if (r->refseg != NO_SEG && (r->refseg & 1))
+    error (ERR_NONFATAL, "RDF format does not support segment base"
+          " references");
+
   r->refseg >>= 1;    /* adjust segment nos to RDF rather than NASM */
 
   membufwrite(header,&r->type,1);
@@ -465,7 +469,7 @@ static void rdf_cleanup (void) {
 }
 
 static long rdf_segbase (long segment) {
-    return 0;
+    return segment;
 }
 
 static int rdf_directive (char *directive, char *value, int pass) {
index db465cd..d7bbdb0 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -179,7 +179,7 @@ insn *parse_line (int pass, char *buffer, insn *result,
        result->opcode == I_DQ ||
        result->opcode == I_DT ||
        result->opcode == I_INCBIN) {
-       extop *eop, **tail = &result->eops;
+       extop *eop, **tail = &result->eops, **fixptr;
        int oper_num = 0;
 
        /*
@@ -189,6 +189,7 @@ insn *parse_line (int pass, char *buffer, insn *result,
            i = stdscan(NULL, &tokval);
            if (i == 0)
                break;
+           fixptr = tail;
            eop = *tail = nasm_malloc(sizeof(extop));
            tail = &eop->next;
            eop->next = NULL;
@@ -231,6 +232,8 @@ insn *parse_line (int pass, char *buffer, insn *result,
                        eop->type = EOT_NOTHING;
                    }
                    eop = nasm_realloc(eop, sizeof(extop)+eop->stringlen);
+                   tail = &eop->next;
+                   *fixptr = eop;
                    eop->stringval = (char *)eop + sizeof(extop);
                    if (!float_const (tokval.t_charptr, sign,
                                      (unsigned char *)eop->stringval,
index 4318e33..032854e 100644 (file)
--- a/preproc.c
+++ b/preproc.c
@@ -2604,9 +2604,17 @@ static int expand_mmacro (Token *tline) {
 
     /*
      * If we had a label, push it on the front of the first line of
-     * the macro expansion.
+     * the macro expansion. We must check that this doesn't give
+     * two consecutive TOK_WHITESPACE.
      */
     if (label) {
+       if (last->type == TOK_WHITESPACE &&
+           istk->expansion->first->type == TOK_WHITESPACE) {
+           Token *victim = istk->expansion->first; /* kill this whitespace */
+           istk->expansion->first = victim->next;
+           nasm_free (victim->text);
+           nasm_free (victim);
+       }
        last->next = istk->expansion->first;
        istk->expansion->first = label;
     }
@@ -2706,6 +2714,25 @@ static char *pp_getline (void) {
                }
                line_sync();
            } else {
+               /*
+                * Check whether a `%rep' was started and not ended
+                * within this macro expansion. This can happen and
+                * should be detected. It's a fatal error because
+                * I'm too confused to work out how to recover
+                * sensibly from it.
+                */
+               if (defining) {
+                   if (defining->name)
+                       error (ERR_PANIC,
+                              "defining with name in expansion");
+                   else if (!istk->mstk->name)
+                       error (ERR_PANIC, "istk->mstk has no name but"
+                              " defining is set at end of expansion");
+                   else
+                       error (ERR_FATAL, "`%%rep' without `%%endrep' within"
+                              " expansion of macro `%s'", istk->mstk->name);
+               }
+
                if (istk->mstk->name) {
                    /*
                     * This was a real macro call, not a %rep, and
diff --git a/rdoff/Makefile b/rdoff/Makefile
deleted file mode 100644 (file)
index 78eca4e..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-# Makefile for RDOFF object file utils; part of the Netwide Assembler
-#
-# The Netwide Assembler is copyright (C) 1996 Simon Tatham and
-# Julian Hall. All rights reserved. The software is
-# redistributable under the licence given in the file "Licence"
-# distributed in the NASM archive.
-#
-# This Makefile is designed for use under Unix (probably fairly
-# portably).
-
-CC = gcc
-CCFLAGS = -c -g -Wall -ansi -pedantic -I..
-LINK = gcc
-LINKFLAGS = -g -o
-DLINKFLAGS = -o
-LIBRARIES = 
-STRIP = strip
-LDRDFLIBS = rdoff.o ../nasmlib.o symtab.o collectn.o rdlib.o
-RDXLIBS = rdoff.o rdfload.o symtab.o collectn.o
-
-.c.o:
-       $(CC) $(CCFLAGS) $*.c
-
-all : rdfdump ldrdf rdx rdflib rdf2bin rdf2com
-
-rdfdump : rdfdump.o
-       $(LINK) $(LINKFLAGS) rdfdump rdfdump.o
-ldrdf : ldrdf.o $(LDRDFLIBS)
-       $(LINK) $(LINKFLAGS) ldrdf ldrdf.o $(LDRDFLIBS)
-rdx : rdx.o  $(RDXLIBS)
-       $(LINK) $(LINKFLAGS) rdx rdx.o $(RDXLIBS)
-rdflib : rdflib.o
-       $(LINK) $(LINKFLAGS) rdflib rdflib.o
-rdf2bin : rdf2bin.o $(RDXLIBS) ../nasmlib.o
-       $(LINK) $(LINKFLAGS) rdf2bin rdf2bin.o $(RDXLIBS) ../nasmlib.o
-rdf2com :
-       ln -s rdf2bin rdf2com
-
-rdf2bin.o : rdf2bin.c
-rdfdump.o : rdfdump.c
-rdoff.o : rdoff.c rdoff.h
-ldrdf.o : ldrdf.c rdoff.h ../nasmlib.h symtab.h collectn.h rdlib.h
-symtab.o : symtab.c symtab.h
-collectn.o : collectn.c collectn.h
-rdx.o : rdx.c rdoff.h rdfload.h symtab.h
-rdfload.o : rdfload.c rdfload.h rdoff.h collectn.h symtab.h
-rdlib.o : rdlib.c rdlib.h
-rdflib.o : rdflib.c
-
-clean :
-       rm -f *.o *~ rdfdump ldrdf rdx rdflib rdf2bin
-
-
index 816cc98..fca911a 100644 (file)
-# Makefile for RDOFF object file utils; part of the Netwide Assembler
-
-#
-
-# The Netwide Assembler is copyright (C) 1996 Simon Tatham and
-
-# Julian Hall. All rights reserved. The software is
-
-# redistributable under the licence given in the file "Licence"
-
-# distributed in the NASM archive.
-
-#
-
-# This Makefile is designed for use under Unix (probably fairly
-
-# portably).
-
-
-
-CC = sc
-
-CCFLAGS = -I..\ -c -a1 -mn -Nc -w2 -w7 -o+time -5
-
-LINK = link
-
-LINKFLAGS = /noi /exet:NT /su:console
-
-
-
-OBJ=obj
-
-EXE=.exe
-
-
-
-NASMLIB = ..\nasmlib.$(OBJ)
-
-NASMLIB_H = ..\nasmlib.h
-
-LDRDFLIBS = rdoff.$(OBJ) $(NASMLIB) symtab.$(OBJ) collectn.$(OBJ) rdlib.$(OBJ)
-
-RDXLIBS = rdoff.$(OBJ) rdfload.$(OBJ) symtab.$(OBJ) collectn.$(OBJ)
-
-
-
-.c.$(OBJ):
-
-       $(CC) $(CCFLAGS) $*.c
-
-
-
-all : rdfdump$(EXE) ldrdf$(EXE) rdx$(EXE) rdflib$(EXE) rdf2bin$(EXE) rdf2com$(EXE)
-
-
-
-rdfdump$(EXE)   : rdfdump.$(OBJ)
-
-        $(LINK) $(LINKFLAGS) rdfdump.$(OBJ), rdfdump$(EXE);
-
-ldrdf$(EXE)     : ldrdf.$(OBJ) $(LDRDFLIBS)
-
-        $(LINK) $(LINKFLAGS) ldrdf.$(OBJ) $(LDRDFLIBS), ldrdf$(EXE);
-
-rdx$(EXE)       : rdx.$(OBJ) $(RDXLIBS)
-
-        $(LINK) $(LINKFLAGS) rdx.$(OBJ) $(RDXLIBS), rdx$(EXE);
-
-rdflib$(EXE)    : rdflib.$(OBJ)
-
-        $(LINK) $(LINKFLAGS) rdflib.$(OBJ), rdflib$(EXE);
-
-rdf2bin$(EXE)   : rdf2bin.$(OBJ) $(RDXLIBS) $(NASMLIB)
-
-        $(LINK) $(LINKFLAGS) rdf2bin.$(OBJ) $(RDXLIBS) $(NASMLIB), rdf2bin$(EXE);
-
-rdf2com$(EXE)   : rdf2bin$(EXE)
-
-        copy rdf2bin$(EXE) rdf2com$(EXE)
-
-
-
-rdf2bin.$(OBJ)  : rdf2bin.c
-
-rdfdump.$(OBJ)  : rdfdump.c
-
-rdoff.$(OBJ)    : rdoff.c rdoff.h
-
-ldrdf.$(OBJ)    : ldrdf.c rdoff.h $(NASMLIB_H) symtab.h collectn.h rdlib.h
-
-symtab.$(OBJ)   : symtab.c symtab.h
-
-collectn.$(OBJ) : collectn.c collectn.h
-
-rdx.$(OBJ)      : rdx.c rdoff.h rdfload.h symtab.h
-
-rdfload.$(OBJ)  : rdfload.c rdfload.h rdoff.h collectn.h symtab.h
-
-rdlib.$(OBJ)    : rdlib.c rdlib.h
-
-rdflib.$(OBJ)   : rdflib.c
-
-
-
-clean :
-
-        del *.$(OBJ) rdfdump$(EXE) ldrdf$(EXE) rdx$(EXE) rdflib$(EXE) rdf2bin$(EXE)
-
-
-
-
-
+# Makefile for RDOFF object file utils; part of the Netwide Assembler\r
+#\r
+# The Netwide Assembler is copyright (C) 1996 Simon Tatham and\r
+# Julian Hall. All rights reserved. The software is\r
+# redistributable under the licence given in the file "Licence"\r
+# distributed in the NASM archive.\r
+#\r
+# This Makefile is designed for use under Unix (probably fairly\r
+# portably).\r
+\r
+CC = sc\r
+CCFLAGS = -I..\ -c -a1 -mn -Nc -w2 -w7 -o+time -5\r
+LINK = link\r
+LINKFLAGS = /noi /exet:NT /su:console\r
+\r
+OBJ=obj\r
+EXE=.exe\r
+\r
+NASMLIB = ..\nasmlib.$(OBJ)\r
+NASMLIB_H = ..\nasmlib.h\r
+LDRDFLIBS = rdoff.$(OBJ) $(NASMLIB) symtab.$(OBJ) collectn.$(OBJ) rdlib.$(OBJ)\r
+RDXLIBS = rdoff.$(OBJ) rdfload.$(OBJ) symtab.$(OBJ) collectn.$(OBJ)\r
+\r
+.c.$(OBJ):\r
+       $(CC) $(CCFLAGS) $*.c\r
+\r
+all : rdfdump$(EXE) ldrdf$(EXE) rdx$(EXE) rdflib$(EXE) rdf2bin$(EXE) rdf2com$(EXE)\r
+\r
+rdfdump$(EXE)   : rdfdump.$(OBJ)\r
+        $(LINK) $(LINKFLAGS) rdfdump.$(OBJ), rdfdump$(EXE);\r
+ldrdf$(EXE)     : ldrdf.$(OBJ) $(LDRDFLIBS)\r
+        $(LINK) $(LINKFLAGS) ldrdf.$(OBJ) $(LDRDFLIBS), ldrdf$(EXE);\r
+rdx$(EXE)       : rdx.$(OBJ) $(RDXLIBS)\r
+        $(LINK) $(LINKFLAGS) rdx.$(OBJ) $(RDXLIBS), rdx$(EXE);\r
+rdflib$(EXE)    : rdflib.$(OBJ)\r
+        $(LINK) $(LINKFLAGS) rdflib.$(OBJ), rdflib$(EXE);\r
+rdf2bin$(EXE)   : rdf2bin.$(OBJ) $(RDXLIBS) $(NASMLIB)\r
+        $(LINK) $(LINKFLAGS) rdf2bin.$(OBJ) $(RDXLIBS) $(NASMLIB), rdf2bin$(EXE);\r
+rdf2com$(EXE)   : rdf2bin$(EXE)\r
+        copy rdf2bin$(EXE) rdf2com$(EXE)\r
+\r
+rdf2bin.$(OBJ)  : rdf2bin.c\r
+rdfdump.$(OBJ)  : rdfdump.c\r
+rdoff.$(OBJ)    : rdoff.c rdoff.h\r
+ldrdf.$(OBJ)    : ldrdf.c rdoff.h $(NASMLIB_H) symtab.h collectn.h rdlib.h\r
+symtab.$(OBJ)   : symtab.c symtab.h\r
+collectn.$(OBJ) : collectn.c collectn.h\r
+rdx.$(OBJ)      : rdx.c rdoff.h rdfload.h symtab.h\r
+rdfload.$(OBJ)  : rdfload.c rdfload.h rdoff.h collectn.h symtab.h\r
+rdlib.$(OBJ)    : rdlib.c rdlib.h\r
+rdflib.$(OBJ)   : rdflib.c\r
+\r
+clean :\r
+        del *.$(OBJ) rdfdump$(EXE) ldrdf$(EXE) rdx$(EXE) rdflib$(EXE) rdf2bin$(EXE)\r
+\r
+\r
+\1a
\ No newline at end of file
index 92aab58..0be8108 100644 (file)
@@ -1,10 +1,10 @@
-; Standard macro set for NASM 0.96 -*- nasm -*-
+; Standard macro set for NASM 0.97 -*- nasm -*-
 ; Note that although some user-level forms of directives are defined
 ; here, not all of them are: the user-level form of a format-specific
 ; directive should be defined in the module for that directive.
 
 %define __NASM_MAJOR__ 0
-%define __NASM_MINOR__ 96
+%define __NASM_MINOR__ 97
 
 ; These two need to be defined, though the actual definitions will
 ; be constantly updated during preprocessing.