summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2002-04-30 20:53:16 +0000
committerH. Peter Anvin <hpa@zytor.com>2002-04-30 20:53:16 +0000
commit87bc61964cf5d2cc2e322883d6f927a43fb53af3 (patch)
treecf5f2e9602092902807762c09912a5e520121368
parent76690a12ad212d1f77cd1f71d7ac5a9de6eaefb6 (diff)
downloadnasm-87bc61964cf5d2cc2e322883d6f927a43fb53af3.tar.gz
-rw-r--r--Changes47
-rw-r--r--Makefile.dj81
-rw-r--r--Makefile.lcc110
-rw-r--r--Readme7
-rw-r--r--Wishlist12
-rw-r--r--configure.in110
-rw-r--r--doc/nasmdoc.src22
-rw-r--r--insns.bas1
-rwxr-xr-xinstall-sh250
-rw-r--r--macros.bas1
-rw-r--r--macros.c2
-rwxr-xr-xmakedist.sh70
-rw-r--r--nasm.h4
-rw-r--r--nasmlib.c29
-rw-r--r--ndisasm.c5
-rw-r--r--outobj.c5
-rw-r--r--outrdf.c6
-rw-r--r--parser.c5
-rw-r--r--preproc.c29
-rw-r--r--rdoff/Makefile53
-rw-r--r--rdoff/Makefile.sc169
-rw-r--r--standard.mac4
22 files changed, 827 insertions, 195 deletions
diff --git a/Changes b/Changes
index 242a96d7..24f4bfef 100644
--- 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
index 00000000..6d932f38
--- /dev/null
+++ b/Makefile.dj
@@ -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
index 00000000..1f6fdcbd
--- /dev/null
+++ b/Makefile.lcc
@@ -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 95ce9f13..11fb184e 100644
--- 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.
diff --git a/Wishlist b/Wishlist
index 17ef6998..197b113b 100644
--- 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
index 00000000..b5fb0e19
--- /dev/null
+++ b/configure.in
@@ -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)
diff --git a/doc/nasmdoc.src b/doc/nasmdoc.src
index 0f802663..2828c7f3 100644
--- a/doc/nasmdoc.src
+++ b/doc/nasmdoc.src
@@ -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
diff --git a/insns.bas b/insns.bas
index ea52bcdb..36dc3e12 100644
--- a/insns.bas
+++ b/insns.bas
@@ -533,3 +533,4 @@ FUNCTION StrTrimRight$ (a$, b$) 'public
StrTrimRight$ = LEFT$(a$, p)
END FUNCTION
+ \ No newline at end of file
diff --git a/install-sh b/install-sh
new file mode 100755
index 00000000..ebc66913
--- /dev/null
+++ b/install-sh
@@ -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
diff --git a/macros.bas b/macros.bas
index cad02c3c..89ba846b 100644
--- a/macros.bas
+++ b/macros.bas
@@ -173,3 +173,4 @@ FUNCTION StrTrimRight$ (a$, b$) 'public
StrTrimRight$ = LEFT$(a$, p)
END FUNCTION
+ \ No newline at end of file
diff --git a/macros.c b/macros.c
index e2c97adb..ea02959a 100644
--- 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
index 00000000..5b7abfcc
--- /dev/null
+++ b/makedist.sh
@@ -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 9f1fbc95..8dafac5d 100644
--- 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
diff --git a/nasmlib.c b/nasmlib.c
index bd671f55..4508fec4 100644
--- 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 */
}
/*
diff --git a/ndisasm.c b/ndisasm.c
index ffe6c129..90639e90 100644
--- 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;
}
diff --git a/outobj.c b/outobj.c
index 0a64c6ae..f54d2976 100644
--- 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;
diff --git a/outrdf.c b/outrdf.c
index 6b01c751..cde13277 100644
--- 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) {
diff --git a/parser.c b/parser.c
index db465cd9..d7bbdb0c 100644
--- 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,
diff --git a/preproc.c b/preproc.c
index 4318e33f..032854e1 100644
--- 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
index 78eca4ea..00000000
--- a/rdoff/Makefile
+++ /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
-
-
diff --git a/rdoff/Makefile.sc b/rdoff/Makefile.sc
index 816cc98e..fca911ad 100644
--- a/rdoff/Makefile.sc
+++ b/rdoff/Makefile.sc
@@ -1,112 +1,57 @@
-# 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
+#
+# 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)
+
+
+ \ No newline at end of file
diff --git a/standard.mac b/standard.mac
index 92aab583..0be81088 100644
--- a/standard.mac
+++ b/standard.mac
@@ -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.