***************
*** 0 ****
--- 1,278 ----
+ Notes on Building NH3.2 with Think C
+ 
+ In General
+ 
+ 	What is different between MPW and Think C?
+ 
+ 	Think C does not have a shell, :-(.  MPW does.  Ugh.  The lack of
+ shell requires the cumbersome task of building the pieces by hand.
+ We build NetHack in the top directory but all files are placed in a result
+ directory.  The final executable will need to be moved to this result
+ directory.  Eventually we hope to modify NetHack to look for its files
+ in its resources.
+ 
+ 	Life without a shell also requires the NetHack resource file to 
+ be put together by hand.  This is one area that Think C 6.0 has improved our
+ lives.  Under 6.0, we can now add E.rsrc and E.r files as source to the
+ project.  Dot rsrc files will be added to the project rsrc file directly and
+ dot r files will be compiled and then added.  For those who are without Think
+ 6.0, good luck.  The best approach is to use the resource compiler to compile
+ the dot r file, and name the result as the projects rsrc file.
+ 
+ 	Makedefs is another story.  When run, a command window pops up.  Hit return
+ to perform all options.  Otherwise, type in the options you require.
+ 
+ 	Needless to say, all of the above stuff that we must do because of
+ the lack of shell also implies no Makefile, so we must be aware of what
+ files that we have modified and which files are dependent upon these modified
+ files.  In other words, we must constantly ask ourselves "gee, do we need to
+ run Makedefs again?".  Life is tough; this is to help you get used to it.
+ 
+ 	What follows are most of the steps that we take in compiling NH3.2 using
+ Think C 6.  If you find something left out, or think a little more detail is
+ needed, send us some mail.  We can be reached at nethack-bugs@linc.cis.upenn.edu
+ 
+ The Steps
+ 
+ 	-2. Read the Think C manuals.  Know your compiler and your
+ 	    environment.  They are your friends and you are stuck with them.
+ 	
+ 	-1. Get Think Reference or buy a bunch of books that cover
+ 	    Macintosh programming (the correct number of books can be
+ 	    determined when you start seeing the same stuff over and over
+ 	    again -- or you run out of cash).
+ 		
+ 	0. Learn C and the standard io library.
+ 	
+ 	From here, we will assume that you know how to build and compile
+ projects, how file names are resolved, what a project's resource file is
+ for, and how the resource compiler works.  If you don't, repeat the above
+ steps.
+ 	
+ 	1. Grab the sources, maintaining the directory structure.  We will
+ refer to the top most directory as 'top'.
+ 
+ 	2. Move the project files in :sys:mac to top.  The projects are MakeDefs.proj,
+ DgnComp.proj, LevComp.proj and NetHack.proj.
+ 	
+ 	3. Delete (or rename) 'sys:mac:hack.h'.  It is used in the MPW
+ build and will interfere with the Think C compile.
+ 
+ 	4. Create a directory "lib" at the top level.
+ 
+ 	5. Build and run MakeDefs.
+ 
+ 		You will be presented with a list of options.  Initially choose them all (the
+ 		default).  Later you may wish to only run a few of them.  The options are
+ 		"odemvpqrhz", each of which makes a file:
+ 
+ 				-o creates :include:onames.h
+ 				-p creates :include:pm.h
+ 				-z creates :src:vis_tab.c
+ 				-m creates :src:monstr.c
+ 				-e creates :dat:dundeon.pdf
+ 				-v creates :lib:options
+ 				-d creates :lib:data
+ 				-r creates :lib:rumors
+ 				-h creates :lib:oracles
+ 				-q creates :lib:quest.dat
+ 
+ 	6. Make a precompiled header.  This step is optional.  If you do it, you
+ 	   will speed up your compile, but it adds complexity.  If you change any
+ 	   header, you will need to redo this step.  Change the following files:
+ 
+ 		include:hack.h
+ 			a. this file should be renamed 'include:realhack.h'.
+ 			b. create a new file 'sys:mac:NetHack Headers.c'
+ 			   with a single line:
+ 				#include 'realhack.h'
+ 			c. precompile this new file and save the precompile output
+ 			   as 'include:hack.h'
+ 	
+ 		sys:share:lev_lex.c, sys:share:lev_yacc.c, util:lev_main.c
+ 			a. change inclusion of 'hack.h' to 'realhack.h'
+ 
+ 	7. Copy the following files.  You may want to change News or NHDeflts.
+ 
+ 		a. copy ':sys:mac:MacHelp' to ':lib:MacHelp'
+ 		b. copy ':sys:mac:News' to ':lib:News'
+ 		c. copy ':sys:mac:NHDeflts' to ':lib:NetHack Defaults'
+ 
+ 	8. Build and run DgnComp.
+ 		This will create a file "dungeon" in the lib directory.
+ 
+ 	9. Build and run LevComp.
+ 		This will build the level files (*.lev) in the lib directory.
+ 
+ 	10. Build NetHack.
+ 		Move NetHack in the lib directory.
+ 
+ 
+ 
+ Appendix
+ 
+ A. Futures
+ 
+ 	1.	Modify NetHack to look for data files in the folder 'data'.
+ 	2.	Take advantage of the new scripting abilities of Think C 6.0.
+ 
+ B. Project Contents
+ 
+ All projects should have both far code and far data set.  Set the
+ application size of NetHack.proj to a couple of megs.
+ 
+ Set the application size of LevComp.proj to a meg (We suspect that there is a
+ memory leak in there somewhere).  All projects should contain the libraries
+ MacTraps, ANSI, and unix.
+ 		
+ 		MakeDefs.proj should contain the following source files:
+ 		
+ 			objects.c
+ 			monst.c
+ 			MakeDefs.c
+ 			
+ 		DgnComp.proj should contain the following source files:
+ 			
+ 			dgn_lex.c
+ 			dgn_main.c
+ 			dgn_yacc.c
+ 			alloc.c
+ 			panic.c
+ 
+ 		LevComp.proj should contain the following source files:
+ 		
+ 			monst.c
+ 			objects.c
+ 			drawing.c
+ 			alloc.c
+ 			panic.c
+ 			lev_lex.c
+ 			lev_yacc.c
+ 			macerrs.c
+ 			macfile.c
+ 			decl.c
+ 			lev_main.c
+ 			
+ 			add #define SPEC_LEV to prefix
+ 			
+ 		NetHack.proj should contain the following source files:
+ 
+ 			allmain.c
+ 			alloc.c
+ 			apply.c
+ 			artifact.c
+ 			attrib.c
+ 			ball.c
+ 			bones.c
+ 			botl.c
+ 			cmd.c
+ 			dbridge.c
+ 			decl.c
+ 			detect.c
+ 			display.c
+ 			do.c
+ 			do_name.c
+ 			do_wear.c
+ 			dog.c
+ 			dogmove.c
+ 			dokick.c
+ 			dothrow.c
+ 			drawing.c
+ 			dungeon.c
+ 			eat.c
+ 			end.c
+ 			engrave.c
+ 			exper.c
+ 			explode.c
+ 			extralev.c
+ 			files.c
+ 			fountain.c
+ 			hack.c
+ 			hacklib.c
+ 			invent.c
+ 			light.c
+ 			lock.c
+ 			maccurs.c
+ 			macerrs.c
+ 			macfile.c
+ 			macmain.c
+ 			macmenu.c
+ 			macsnd.c
+ 			macunix.c
+ 			macwin.c
+ 			makemon.c
+ 			mcastu.c
+ 			mgetline.c
+ 			mhitm.c
+ 			mhitu.c
+ 			minion.c
+ 			mklev.c
+ 			mkmap.c
+ 			mkmaze.c
+ 			mkobj.c
+ 			mkroom.c
+ 			mmodal.c
+ 			mon.c
+ 			mondata.c
+ 			monmove.c
+ 			monst.c
+ 			monstr.c NOTE: created by MakeDefs -m, so add it later
+ 			mplayer.c
+ 			mstring.c
+ 			mthrowu.c
+ 			muse.c
+ 			music.c
+ 			o_init.c
+ 			objects.c
+ 			objnam.c
+ 			options.c
+ 			pager.c
+ 			pickup.c
+ 			pline.c
+ 			polyself.c
+ 			potion.c
+ 			pray.c
+ 			priest.c
+ 			quest.c
+ 			questpgr.c
+ 			random.c
+ 			read.c
+ 			rect.c
+ 			restore.c
+ 			rip.c
+ 			rnd.c
+ 			rumors.c
+ 			save.c
+ 			shk.c
+ 			shknam.c
+ 			sit.c
+ 			sounds.c
+ 			sp_lev.c
+ 			spell.c
+ 			steal.c
+ 			timeout.c
+ 			mactopl.c
+ 			topten.c
+ 			track.c
+ 			trap.c
+ 			u_init.c
+ 			uhitm.c
+ 			vault.c
+ 			version.c
+ 			vision.c
+ 			vis_tab.c	NOTE: generated by Makedefs -z
+ 			weapon.c
+ 			were.c
+ 			wield.c
+ 			windows.c
+ 			wizard.c
+ 			worm.c
+ 			worn.c
+ 			write.c
+ 			zap.c
+ 			getline.c
+ 			topl.c
+ 			wintty.c
+ 			mactty.c
+ 			mttymain.c
+ 			dprintf.c
