HertzDevil had a
similar idea.
It's not traditional to use
.exe with UNIX executables. You can usually detect the difference between UNIX and Windows by the absence or presence of the
COMSPEC environment variable.
Code:
# Use .exe only on Windows, which defines COMSPEC
ifdef COMSPEC
DOTEXE:=.exe
else
DOTEXE:=
endif
EXENAME:=nsfid$(DOTEXE)
.PHONY: all
all: $(EXENAME)
$(EXENAME): nsfid.c
gcc $^ -Wall -O3 -s -o $@
This makefile incorporates
COMSPEC as well as three other changes:
- You can strip debugging symbols from the output while linking by using -s in the command line that produces the executable.
- Use two automatic variables so that the makefile doesn't repeat itself: $^ means "name of all dependencies", and $@ means "name of the target".
- Target names that do not refer to an actual file, such as all, clean, and the like, need to be declared .PHONY so that Make doesn't get confused if there's an actual file by that name.
Some error checking is missing.
-Wall in GCC 4.8.5 includes
-Wunused-result, and you're ignoring return values of several standard library functions declared with attribute
warn_unused_result:
- getcwd at lines 100, 175, 321
- chdir at lines 174, 177, 333, 335
- fscanf at line 199
- fread at line 199, 390
Once I compiled the program and ran it from a terminal, the output was as follows:
Code:
.../nsfid$ ./nsfid
Using configfile
No signatures defined!
It's traditional, if a required argument is missing, to recommend on
stderr that the user run
programname --help.
Usage is somewhat confusing, as it works only on directories, not individual files.
Code:
.../nsfid$ NSFIDCFG=./nsfid.cfg ./nsfid ~/Music/old_nt2_nsfs
emerald_hill.nsf NerdTracker_II
meatspin.nsf NerdTracker_II
fuga7777.nsf NerdTracker_II
Opentris.nsf NerdTracker_II
bomblodev2.nsf NerdTracker_II
dy-covers.nsf NerdTracker_II
Butterfly.nsf NerdTracker_II
Detected players:
NerdTracker_II 7
Statistics:
Identified 7
Unidentified 0
Total files examined 7
.../nsfid$ NSFIDCFG=./nsfid.cfg ./nsfid ~/Music/old_nt2_nsfs/dy-covers.nsf
Using configfile ./nsfid.cfg
Statistics:
Identified 0
Unidentified 0
Total files examined 0
I ran it against the development folder for
my own music engine, whose source code can be
browsed:
Code:
.../nsfid$ NSFIDCFG=./nsfid.cfg ./nsfid ~/develop/pently
Using configfile ./nsfid.cfg
Statistics:
Identified 0
Unidentified 1
Total files examined 1
Any tips on making signatures that are distinctive yet resilient to minor changes in new versions of the engine, beyond those listed on
the sidid GitHub project?