]> git.pond.sub.org Git - empserver/log
empserver
16 years agoTighten gcc warning options
Markus Armbruster [Mon, 3 Mar 2008 19:12:46 +0000 (20:12 +0100)]
Tighten gcc warning options

Suppress only unused parameters, not all unused stuff.

16 years agoRemove an unused variable in fit_plane_off_land()
Markus Armbruster [Mon, 3 Mar 2008 19:09:26 +0000 (20:09 +0100)]
Remove an unused variable in fit_plane_off_land()

16 years agoRemove dead code for estimating defense
Markus Armbruster [Mon, 3 Mar 2008 19:08:43 +0000 (20:08 +0100)]
Remove dead code for estimating defense

Clean up of intelligence_report().  Should have been done in commit
092a52f2.

16 years agouse_supply() is now unused, remove
Markus Armbruster [Mon, 3 Mar 2008 07:31:03 +0000 (08:31 +0100)]
use_supply() is now unused, remove

16 years agoFactor out common land unit fire code into lnd_fire()
Markus Armbruster [Mon, 3 Mar 2008 07:29:52 +0000 (08:29 +0100)]
Factor out common land unit fire code into lnd_fire()

This takes care of a number of bugs / inconsistencies:

* Resupply before fire: fire command did not require unit to be in
  supply, and resupplied shells.  Everywhere else (return fire,
  support and interdiction) the land unit had to be in supply after
  resupply of everything.  Unify not to resupply anything and not to
  require being in supply.  This is consistent with ships and sectors.

* Resupply after fire: fire command resupplied shells after active
  fire.  Unify not to do that.  This is consistent with ships and
  sectors.

* When a land unit returned fire to multiple attackers, quiet_bigdef()
  charged it ammo for each one.  Finally, it was charged one shell
  more by use_ammo().  Except only the first land unit got charged
  there in fact, because buggy add_to_fired_queue() entered only the
  first land unit into the defender list.  Fix add_to_fired_queue()
  and change quiet_bigdef() not to charge ammo, just like for ships
  and sectors.  This charges only one shell instead of the true ammo
  use, which is wrong, but consistent with ships.

* lnd_support() tallied support damage unrounded.  Unify to round
  before tally.

16 years agoSimplify torpedo return fire logic
Markus Armbruster [Sun, 2 Mar 2008 21:19:57 +0000 (22:19 +0100)]
Simplify torpedo return fire logic

Don't bother checking capabilities that will be checked again later,
just try torpedo, then depth charge / gun fire.

16 years agoFactor out common torpedo fire code into shp_torp()
Markus Armbruster [Sun, 2 Mar 2008 14:45:41 +0000 (15:45 +0100)]
Factor out common torpedo fire code into shp_torp()

This takes care of a number of bugs / inconsistencies:

* Submarines with zero mobility could interdict.  Change to require
  positive mobility.

* Submarines with zero firing range could not interdict.  Fix by
  dropping the test from perform_mission().  No ships in the stock
  game are affected.

* Submarines without capability torp could fire return torpedoes and
  interdict.  Stock sbc, nm and msb were affected by the return fire
  bug.  Closes bug#950936.

* Shell resupply bugs: quiet_bigdef(), fire_torp() and
  perform_mission() resupplied before checking all other requirements
  and could thus get more shells than actually needed.

torp() no longer resupplies shells.  It's hardly worth the bother, and
fire doesn't do it either.

16 years agoFix torpedo return fire line of sight requirement and range
Markus Armbruster [Sun, 2 Mar 2008 13:05:31 +0000 (14:05 +0100)]
Fix torpedo return fire line of sight requirement and range

anti_torp() required line of sight and used gun range for all kinds of
return fire.  Require line of sight only for torpedoes, not for gun
fire and depth charges.  Use torpedo range for torpedoes, gun range
for gun fire and depth charges.

16 years agoChange test whether a land unit is artillery
Markus Armbruster [Mon, 3 Mar 2008 06:29:24 +0000 (07:29 +0100)]
Change test whether a land unit is artillery

Test for land unit firing damage instead of range, for consistency
with ships.

16 years agoFactor out common ship gun fire code into shp_fire()
Markus Armbruster [Sun, 2 Mar 2008 10:59:56 +0000 (11:59 +0100)]
Factor out common ship gun fire code into shp_fire()

This takes care of a number of bugs / inconsistencies:

* Ships with zero firing range could return fire and fire support, but
  not fire actively or interdict.  Fix by testing for gun limit
  instead in multifire() and mission().  No ships in the stock game
  are affected.

* Required gun crew was inconsistent: multifire() let N military fire
  max(1,floor(N/2)) guns for active fire.  Ditto perform_mission() for
  interdiction.  quiet_bigdef() let them fire N guns for returning gun
  fire.  Ditto sd() for firing support and firing at boarding parties.
  fire_dchrg() let them fire floor(N/2) for returning fire to
  torpedoes.  Unify to let N military fire floor((N+1)/2) guns.

* Shell use was inconsistent: sd() and perform_mission() used one
  shell per gun, everything else one per two guns.  Unify to one shell
  per two guns.

* Shell resupply bugs: multifire() got two shells regardless of actual
  ammo use.  quiet_bigdef() got one shell (but use_ammo() uses only
  one, which is a bug).  sd() and perform_mission() resupplied before
  checking all other requirements and could thus get more shells than
  actually needed.

16 years agoMake depth-charging code and documentation match
Markus Armbruster [Sun, 2 Mar 2008 10:01:42 +0000 (11:01 +0100)]
Make depth-charging code and documentation match

Before 4.0.6, depth charges required no guns, one military, did damage
like shell fire from two guns, and used two shells.  Missions were not
quite consistent with that (bug).  4.0.6 changed depth charges to work
exactly like shell fire (but without updating documentation
accordingly): require guns and gun crew, non-zero firing range, scale
damage and ammunition use with guns.

Go back to the old model, but with damage like three guns, to avoid
changing the stock game's dd now (three gun damage for two shells).
Stock game's af changes from two gun damage for one shell, and nas
from four gun damage for two shells.

Factor out common depth-charging code into shp_dchrg().

16 years agoFactor out common fortress fire code into fort_fire()
Markus Armbruster [Fri, 14 Mar 2008 19:01:05 +0000 (20:01 +0100)]
Factor out common fortress fire code into fort_fire()

This takes care of a number of bugs / inconsistencies:

* sb() fired support even when there were not enough mil.

* Shell resupply bugs: multifire() and quiet_bigdef() resupplied
  shells before checking all other requirements and could thus get
  more shells than actually needed.

Rename landgun() to fortgun() for consistency.

16 years agoInclude system headers before ours
Markus Armbruster [Fri, 29 Feb 2008 06:09:34 +0000 (07:09 +0100)]
Include system headers before ours

16 years agoGive logx() internal linkage
Markus Armbruster [Fri, 29 Feb 2008 06:08:59 +0000 (07:08 +0100)]
Give logx() internal linkage

16 years agoNew unit stat development functions
Markus Armbruster [Fri, 29 Feb 2008 05:49:18 +0000 (06:49 +0100)]
New unit stat development functions

The macros defining unit stat development in tech are somewhat
inconvenient to use.  Define more convenient functions, and hide away
the macros near the function definitions.

16 years agoConvert a CANT_HAPPEN() to CANT_REACH()
Markus Armbruster [Thu, 28 Feb 2008 19:26:54 +0000 (20:26 +0100)]
Convert a CANT_HAPPEN() to CANT_REACH()

16 years agoRemove edit keys deprecated in 4.3.3
Markus Armbruster [Thu, 28 Feb 2008 19:22:12 +0000 (20:22 +0100)]
Remove edit keys deprecated in 4.3.3

These are: land 'C', plane 'a' and 'd', unit 'X', ship 'H', 'P', 'X'
and 'Y'.

16 years agoImplement xundump table truncation
Markus Armbruster [Tue, 26 Feb 2008 20:19:26 +0000 (21:19 +0100)]
Implement xundump table truncation

16 years agoNew ef_truncate()
Markus Armbruster [Sun, 9 Mar 2008 12:42:12 +0000 (13:42 +0100)]
New ef_truncate()

16 years agoPOSIX compatible ftruncate() for Windows
Markus Armbruster [Tue, 26 Feb 2008 19:05:36 +0000 (20:05 +0100)]
POSIX compatible ftruncate() for Windows

16 years agoClean up dependencies after failed compile
Markus Armbruster [Mon, 25 Feb 2008 20:38:22 +0000 (21:38 +0100)]
Clean up dependencies after failed compile

If gcc's preprocessor chokes, it leaves an empty dependency file
behind, and doesn't touch the object file.  If an old object file
exists, and is newer than the .c file, make will then consider the
object file up-to-date.  This can lead to nasty version errors.

16 years agoRemove redundant initializations from fairland's fl_sct_init()
Markus Armbruster [Mon, 25 Feb 2008 20:22:07 +0000 (21:22 +0100)]
Remove redundant initializations from fairland's fl_sct_init()

16 years agoClean up confusing loop control in fairland
Markus Armbruster [Mon, 25 Feb 2008 20:20:48 +0000 (21:20 +0100)]
Clean up confusing loop control in fairland

16 years agoReplace unit_type_name() by empobj_chr_name()
Markus Armbruster [Mon, 25 Feb 2008 20:18:35 +0000 (21:18 +0100)]
Replace unit_type_name() by empobj_chr_name()

16 years agoSimplify empobj_chr_name() oops recovery
Markus Armbruster [Mon, 25 Feb 2008 20:15:50 +0000 (21:15 +0100)]
Simplify empobj_chr_name() oops recovery

Return something usable instead of null.  Matches obj_nameof().  Fixes
those callers that neglected to check the value.

16 years agoRename emp_obj_chr_name() to empobj_chr_name()
Markus Armbruster [Mon, 25 Feb 2008 20:11:19 +0000 (21:11 +0100)]
Rename emp_obj_chr_name() to empobj_chr_name()

16 years agoMake ef_verify() check ef_type and uid
Markus Armbruster [Mon, 25 Feb 2008 20:07:06 +0000 (21:07 +0100)]
Make ef_verify() check ef_type and uid

16 years agoOops when bad ef_type or uid is written to disk
Markus Armbruster [Mon, 25 Feb 2008 20:05:48 +0000 (21:05 +0100)]
Oops when bad ef_type or uid is written to disk

16 years agoCheck ef_type before dereferencing struct empobj
Markus Armbruster [Mon, 25 Feb 2008 19:57:33 +0000 (20:57 +0100)]
Check ef_type before dereferencing struct empobj

Such manual checking is error prone, but the best we can do right now.

16 years agoCheck subscript of rpt[]
Markus Armbruster [Sun, 24 Feb 2008 21:15:10 +0000 (22:15 +0100)]
Check subscript of rpt[]

Make nws_vrb unsigned to simplify that.

16 years agoFix tests for unused news slots
Markus Armbruster [Sun, 24 Feb 2008 19:33:57 +0000 (20:33 +0100)]
Fix tests for unused news slots

delete_old_news() and init_nreport() tested for non-zero nws_when,
which is breaks for news at the epoch.  Not likely to happen, but
still wrong.

ncache() tested nws_uid, which breaks for the first entry in the news
file.  This made ncache() overlook that entry in the cache, and create
a new news item instead of incrementing nws_ntm.  Was always broken
that way.

Fix by testing nws_vrb instead.

16 years agoGet rid of struct newscache
Markus Armbruster [Sun, 24 Feb 2008 18:12:49 +0000 (19:12 +0100)]
Get rid of struct newscache

Just use struct nwsstr, it has the uid now.

16 years agoFix news expiry not to screw up nws_uid
Markus Armbruster [Sun, 24 Feb 2008 18:55:10 +0000 (19:55 +0100)]
Fix news expiry not to screw up nws_uid

delete_old_news() moves unexpired news.  Update nws_uid accordingly.
It then zaps the slots no longer in use.  Don't zap ef_type and
nws_uid.

16 years agoUse ef_blank() when extending news file
Markus Armbruster [Sun, 24 Feb 2008 18:02:43 +0000 (19:02 +0100)]
Use ef_blank() when extending news file

The call of ef_ensure_space() serves no purpose: the blank records it
adds are ignored on read, and overwritten (not updated) by new news.
Get rid of it.

16 years agoUse ef_blank() when extending lost file, and simplify
Markus Armbruster [Sun, 24 Feb 2008 17:50:02 +0000 (18:50 +0100)]
Use ef_blank() when extending lost file, and simplify

16 years agoUse ef_blank() when extending treaty, loan, comm and trade file
Markus Armbruster [Sun, 24 Feb 2008 17:47:22 +0000 (18:47 +0100)]
Use ef_blank() when extending treaty, loan, comm and trade file

Only treaty extension initialized ef_type and uid properly.  None of
them zeroed unused members and holes in the struct.  comm and trade
extension called ef_extend(), which had no effect, so remove that.

16 years agoUse ef_blank for new ships, planes, land units and nukes
Markus Armbruster [Fri, 14 Mar 2008 18:59:30 +0000 (19:59 +0100)]
Use ef_blank for new ships, planes, land units and nukes

Fixes commit 6cd3d55c, which broke initialization of ef_type.

16 years agoNew ef_blank()
Markus Armbruster [Sun, 24 Feb 2008 17:28:09 +0000 (18:28 +0100)]
New ef_blank()

It performs the same initialization as ef_extend().

16 years agoempfile's init callback is now unused, remove
Markus Armbruster [Sun, 24 Feb 2008 10:19:51 +0000 (11:19 +0100)]
empfile's init callback is now unused, remove

16 years agoshp_init(), lnd_init(), pln_init(), nuk_init() are now empty, remove
Markus Armbruster [Sun, 24 Feb 2008 10:13:48 +0000 (11:13 +0100)]
shp_init(), lnd_init(), pln_init(), nuk_init() are now empty, remove

16 years agoInitialize ef_type and uid automatically in ef_extend()
Markus Armbruster [Sun, 24 Feb 2008 10:07:18 +0000 (11:07 +0100)]
Initialize ef_type and uid automatically in ef_extend()

New struct emptypedstr to avoid depending on empobj.h there.

Remove now superfluous manual initializations elsewhere.

This doesn't fix any missing initializations.

16 years agoNew empfile flag EFF_TYPED to signal struct empobj support
Markus Armbruster [Sun, 24 Feb 2008 09:06:01 +0000 (10:06 +0100)]
New empfile flag EFF_TYPED to signal struct empobj support

Elements of tables with EFF_TYPED set share the common header of
struct empobj.

16 years agoExtend the common header of struct empobj to include uid
Markus Armbruster [Mon, 25 Feb 2008 07:23:19 +0000 (08:23 +0100)]
Extend the common header of struct empobj to include uid

Make sure all members of unit empobj_storage share uid in addition to
ef_type.

Add matching uid member to struct gamestr, struct natstr and struct
sctstr, and set them.

Swap struct empobj members uid and own to make that easier, and update
struct comstr, struct lndstr, struct lonstr, struct loststr, struct
nwsstr, struct nukstr, struct plnstr, struct realmstr, struct shpstr,
struct trdstr, struct trtstr accordingly.

Note that the uid isn't properly set for struct nwsstr, struct lonstr,
struct trdstr, struct comstr and struct loststr.  To be fixed.

16 years agoDocument tables EF_COMM, EF_TRADE and EF_COUNTRY have an owner
Markus Armbruster [Mon, 25 Feb 2008 19:37:01 +0000 (20:37 +0100)]
Document tables EF_COMM, EF_TRADE and EF_COUNTRY have an owner

xdvisible() relies on that.

Set EFF_OWNER in the table definitions.  EFF_OWNER is not actually
used right now, so this doesn't fix anything broken.

16 years agoSimplify unit_put()
Markus Armbruster [Sat, 23 Feb 2008 07:35:13 +0000 (08:35 +0100)]
Simplify unit_put()

16 years agoUse get_empobj() instead of get_empobjp() in unit_map()
Markus Armbruster [Sat, 23 Feb 2008 07:26:04 +0000 (08:26 +0100)]
Use get_empobj() instead of get_empobjp() in unit_map()

The get_FOOp() macros are generally avoided outside the update,
because direct access to the sector cache needs synchronization to be
safe.  unit_map() didn't access the cache directly until it was
converted from get_ship() & friends to get_empobjp() in commit
fec9878c.  Switching to get_empobj() reverts the change to direct
access while keeping the simplification.

16 years agoDefine common get/put macros for empobj
Markus Armbruster [Sat, 23 Feb 2008 07:03:35 +0000 (08:03 +0100)]
Define common get/put macros for empobj

This turns existing functions get_empobjp() and put_empobj() into
equivalent macros.

16 years agoFix get_empobjp() not to reject EF_SECTOR
Markus Armbruster [Sat, 23 Feb 2008 06:59:10 +0000 (07:59 +0100)]
Fix get_empobjp() not to reject EF_SECTOR

There's no technical reason for rejecting sector access by id.  It's
unusual, but not wrong.

Also remove the superfluous test for EF_BAD; ef_ptr() covers that.

16 years agoFix put_empobj() for types other than units
Markus Armbruster [Sat, 23 Feb 2008 06:48:32 +0000 (07:48 +0100)]
Fix put_empobj() for types other than units

put_empobj() used struct empobj member uid, which is valid only for
units.  Existing users pass only units, fortunately.  Fix by making it
take type and uid parameters.

16 years agoGive unit_map() internal linkage
Markus Armbruster [Fri, 22 Feb 2008 20:53:24 +0000 (21:53 +0100)]
Give unit_map() internal linkage

16 years agoNew realm selector timestamp
Markus Armbruster [Fri, 22 Feb 2008 20:37:04 +0000 (21:37 +0100)]
New realm selector timestamp

The timestamp always existed, but the selector was missing.  It's
needed for incremental xdumps.

16 years agoClean up ugly line break
Markus Armbruster [Fri, 22 Feb 2008 20:13:32 +0000 (21:13 +0100)]
Clean up ugly line break

16 years agoFix test for water in explore
Markus Armbruster [Fri, 22 Feb 2008 20:11:30 +0000 (21:11 +0100)]
Fix test for water in explore

This led to a bogus message when an interactive explore moved onto a
bridge and got prompted, the bridge was destroyed, and the player
stopped the explore "on the water".

16 years agoMake sector types signed
Markus Armbruster [Fri, 22 Feb 2008 19:58:37 +0000 (20:58 +0100)]
Make sector types signed

get_empobj_chr() and emp_obj_chr_name() access struct sctstr member
sct_type through struct empobj member type.  This is technically
non-portable, because the two differ in signedness.  It was also
undocumented.  Fix by making sct_type signed.  sct_newtype as well,
for consistency.

map_char() uses unsigned char for a sector type argument.  Change that
to int.  Matches how this is done elsewhere.

16 years agoMake xundump capable of extending tables
Markus Armbruster [Thu, 21 Feb 2008 20:17:32 +0000 (21:17 +0100)]
Make xundump capable of extending tables

Use ef_ensure_space() in getobj().  This also makes sure objects are
properly initialized before undumping writes to them.

Clean up how sentinels are appended: instead of keeping its slot
reserved while undumping, keep it in the table, and strip it off when
done.

16 years agoGeneralize ef_extend() to non-file-backed tables
Markus Armbruster [Thu, 21 Feb 2008 20:12:58 +0000 (21:12 +0100)]
Generalize ef_extend() to non-file-backed tables

ef_extend() extended the file bypassing the cache, which screws up the
cache if it's EFF_MEM.  It fixed that by closing and reopening the
table.  Cheesy, and worked only for file-backed tables.

Rewrite ef_extend() to remap the cache properly for EFF_MEM.  While
there, simplify the !EFF_MEM case: steal a cache slot instead of
allocating a buffer.

Factor cache mapping out of ef_open() and ef_extend() into new
ef_realloc_cache().

16 years agoReplace EFF_RDONLY by EFF_PRIVATE
Markus Armbruster [Thu, 21 Feb 2008 20:04:11 +0000 (21:04 +0100)]
Replace EFF_RDONLY by EFF_PRIVATE

Read-only was a bit of a misnomer: you could write to the table by
obtaining a pointer into it from ef_ptr(), you just couldn't write to
the backing file.

Semantic changes:

* ef_flush() is now allowed when the table is file-backed or privately
  mapped.  Before, it had to be file-backed.  Flushing a privately
  mapped table does nothing, just like flushing a read-only table did.

* ef_write() is now allowed when the table is file-backed or fully
  cached.  Before, it had to be file-backed and not read-only.
  Writing to a privately mapped file-backed table doesn't write to the
  file.

* ef_extend() is not implemented for privately mapped tables, just
  like it wasn't implemented for read-only tables.

16 years agoRemove obsolete comment
Markus Armbruster [Tue, 19 Feb 2008 19:27:01 +0000 (20:27 +0100)]
Remove obsolete comment

Obsolete since ef_open() locks the file (commit de124108).

16 years agoRemove unused local variable in desi.c
Ron Koenderink [Wed, 27 Feb 2008 02:58:46 +0000 (20:58 -0600)]
Remove unused local variable in desi.c

Left behind by commit d3a3aa43.

16 years agoDefine and use NATID_BAD instead of literal 255
Markus Armbruster [Tue, 19 Feb 2008 19:25:08 +0000 (20:25 +0100)]
Define and use NATID_BAD instead of literal 255

16 years agoFix spelling of symbol PLN_AIRBURST in plane_flags[]
Markus Armbruster [Sun, 17 Feb 2008 18:54:41 +0000 (19:54 +0100)]
Fix spelling of symbol PLN_AIRBURST in plane_flags[]

16 years agoClean up trailing whitespace-space in manual pages
Markus Armbruster [Sun, 17 Feb 2008 18:50:38 +0000 (19:50 +0100)]
Clean up trailing whitespace-space in manual pages

16 years agoConsider only wilderness for randomly placed sanctuaries
Markus Armbruster [Sun, 17 Feb 2008 08:01:29 +0000 (09:01 +0100)]
Consider only wilderness for randomly placed sanctuaries

Before, any non-sea sector was acceptable.  Placing sanctuaries on
mountains, plains or bridges doesn't seem such a bright idea, though.

16 years agoDon't recompute sct_coastal in desi(), just use it
Markus Armbruster [Sun, 17 Feb 2008 07:56:14 +0000 (08:56 +0100)]
Don't recompute sct_coastal in desi(), just use it

No need to recompute it since sct_coastal was redesigned to be
reliable in 4.3.0 (commit 7b947943),

16 years agoRemove unused check_cost()
Markus Armbruster [Sun, 17 Feb 2008 07:47:51 +0000 (08:47 +0100)]
Remove unused check_cost()

16 years agoDon't let designate check total cost before doing anything
Markus Armbruster [Sun, 17 Feb 2008 07:47:23 +0000 (08:47 +0100)]
Don't let designate check total cost before doing anything

desi() ran the designate code twice, first for adding up the cost,
then for changing designation.  However, the checking pass already
changed the sector when that cost nothing.  The checking pass also
suppressed messages.  There was at least one message that never got
printed because it was suppressed in the checking pass, and the
condition for it was no longer true in the changing pass, due to the
premature sector change: when a deity changed a non-coastal sector to
harbor or bridge head.

The total cost check is of limited value: designate costing money is a
bad idea, and the stock game has no such sectors.  Not enough value to
justify keeping and fixing this disgusting mess.  Remove it instead.

16 years agoFix mobility cost for marines assaulting from non-landing ships
Markus Armbruster [Sat, 16 Feb 2008 19:42:11 +0000 (20:42 +0100)]
Fix mobility cost for marines assaulting from non-landing ships

Always charge land units at least as much mobility for assaulting from
non-landing ships as for landing ships.  Before, marines lost all
mobility when assaulting from a non-landing ship, which could be less
than what the same assault costs from a landing ship (half an update's
worth).

16 years agoRemove thoroughly obsolete info on estimated odds
Markus Armbruster [Sat, 16 Feb 2008 19:14:20 +0000 (20:14 +0100)]
Remove thoroughly obsolete info on estimated odds

The code to estimate odds and ask for confirmation was disabled in
4.0.0, and removed for good in 4.3.4.

16 years agoSimplify take_move_in_mob()
Markus Armbruster [Sat, 16 Feb 2008 17:29:35 +0000 (18:29 +0100)]
Simplify take_move_in_mob()

Actually, this isn't just simplification.  When mobility gain per
update was configured to be greater than 128, mobility could go from 1
to less than -127 when assaulting from a landing ship, and thus
overflow.  Make it saturate at -127.  Note that you can expect plenty
of trouble elsewhere with such a silly configuration.

16 years agoFix LWP's stack initialization for -s
Markus Armbruster [Thu, 14 Feb 2008 22:47:27 +0000 (23:47 +0100)]
Fix LWP's stack initialization for -s

With -s, LWP initializes thread stacks to track stack use.  It did
that after makecontext(), with disastrous results on systems where
makecontext() writes something to the stack that swapcontext() expects
to find there.  Makes FreeBSD 6.2 crash in swapcontext().

Factor stack allocation out of lwpNewContext() into lwpNewStack().
Move call of lwpStackCheckInit() into lwpNewStack().

16 years agoFix confused and buggy bridge splashing code
Markus Armbruster [Mon, 11 Feb 2008 22:14:04 +0000 (23:14 +0100)]
Fix confused and buggy bridge splashing code

A bridge (span or tower) must be splashed when it gets damaged below
SCT_MINEFF.  Likewise when its last supporting sector (bridge head or
tower) gets damaged below SCT_MINEFF, unless EASY_BRIDGES is enabled.
We need to check this whenever a bridge head, span or tower gets
damaged.  This is done in three places, and all of them screw up:

* checksect() ignores damage to bridge heads.  It also leaves writing
  back the sector it checks to the caller, which never happens when
  it's called from sct_postread().

  Note that checksect() drowns all planes on bridges it splashes.
  Functions that need to exempt flying planes from such a fate have to
  splash bridges themselves.

* sect_damage() ignores damage to bridge towers, and damage to bridge
  spans unless EASY_BRIDGES is enabled.  It then runs checksect(),
  which compensates for these omissions, but happily drowns the planes
  sect_damage() attempts to protect.

* eff_bomb() ignores damage to bridge heads.  Collateral damage makes
  sect_damage() run, which compensates for the omission.

This causes the following bugs:

* Efficiency damage going through sect_damage() can drown planes it
  shouldn't.  This affects pinpoint bombing when collateral damage
  splashes a bridge, and strategic bombing.  The drowned planes then
  crash and burn when they attempt to land at their (just splashed)
  base.

* Efficiency damage to bridge heads not going through sect_damage()
  fails to collapse unsupported bridges.  This affects pin-bombing
  efficiency without collateral damage, and ground combat.  Also deity
  commands edit, setsector and add, but that could be regarded as a
  feature.

* If the sector file somehow ends up with an inefficient bridge span,
  it collapses on every read again and again, until it collapses on a
  write.  Related problems exist with other actions of checksect(),
  and they're not addressed here.

* If the sector file somehow ends up with adjacent inefficient bridge
  towers, checksect() on any of them recurses infinitely:

  - checksect() inefficient tower T1
    - knockdown() T1, but don't write that back to the sector file
    - bridgefall() T1; this reads all adjacent sectors, including
      inefficient towert T2
      - checksect() T2
        - knockdown() T2, but don't write that back to the sector file
- bridgefall() T1; this reads adjacent sectors including T1
  - checksect() T1
    ...

This commit creates a new function bridge_damaged() to splash any
bridges that became inefficient or unsupported after damage to a
sector.  To avoid the inifinite recursion, we call it in
sct_prewrite() instead of checksect().

No uses knockdown() outside bridgefall.c remain, so give it internal
linkage.

16 years agoAdded Remove_Repository to supported command list
Ron Koenderink [Sat, 16 Feb 2008 17:15:10 +0000 (11:15 -0600)]
Added Remove_Repository to supported command list

This feature was added in commit 70c03561bb90 but was
not added to the list of supported commands at the top
of file.  No functional change just a documentation
correction.

16 years agoApply the patches using git apply instead of patch
Ron Koenderink [Sat, 16 Feb 2008 17:09:19 +0000 (11:09 -0600)]
Apply the patches using git apply instead of patch

Need to be in the empserver directory before applying
the "git apply" command, move the "cd empserver" to the
clone step. This change also fixes a bug when using
with an existing repository not being the correct
directory when executing the "git pull" command.
Fixes commit acd768e5e2 as it used git diff format.

16 years agoRemove unused local variables
Ron Koenderink [Sat, 9 Feb 2008 17:13:50 +0000 (11:13 -0600)]
Remove unused local variables

16 years agoUpdate nightly build for recent changes to path.c.in
Ron Koenderink [Sat, 9 Feb 2008 14:03:56 +0000 (08:03 -0600)]
Update nightly build for recent changes to path.c.in

The three previous commits touching path.c.in broke mingw.patch: the
relative vs absolute paths changes moved the initializers to be
patched to new variables, and the telfil removal messed up the
context.

16 years agoRemove the initialization for builtindir, not required
Ron Koenderink [Sat, 9 Feb 2008 13:51:07 +0000 (07:51 -0600)]
Remove the initialization for builtindir, not required

Fixes commit 4bb23dd1.

16 years agoClean up initialization of nat_ca[]
Markus Armbruster [Wed, 6 Feb 2008 19:33:33 +0000 (20:33 +0100)]
Clean up initialization of nat_ca[]

Factor it out of ef_init_srv() and put it into new nsc_init(), next to
nat_ca[].

16 years agoClean up initialization of empfile[]
Markus Armbruster [Wed, 6 Feb 2008 19:14:39 +0000 (20:14 +0100)]
Clean up initialization of empfile[]

Split ef_init() into two functions: empfile_init() for initialization,
and empfile_fixup() to fix it up for configuration.  Put them next to
empfile[].  Move the call to empfile_init() from behind emp_config()
to before it.

16 years agoGet rid of the need to fix up lchr[].
Markus Armbruster [Mon, 4 Feb 2008 20:38:38 +0000 (21:38 +0100)]
Get rid of the need to fix up lchr[].

Mil are not required for building units since 4.0.0.  l_mil was still
initialized to l_item[I_MILIT], and used instead of that in a couple
of places.  Fix those, and remove the initialization.

16 years agoFix initialization of configdir
Markus Armbruster [Mon, 4 Feb 2008 06:39:42 +0000 (07:39 +0100)]
Fix initialization of configdir

Windows code leaked memory (result of _fullpath()).

POSIX code passed a null buffer to getcwd(), which is not portable,
and failed to check for errors.

16 years agoMake conftab.c independent of the current directory
Markus Armbruster [Sun, 3 Feb 2008 20:43:49 +0000 (21:43 +0100)]
Make conftab.c independent of the current directory

read_builtin_tables() wanted to run in builtindir, and
read_custom_tables() wanted to run in configdir.  Bothersome.  Use new
fopenat() to relax those requirements.

The chdir() satisfying them are now superflous, remove them.

16 years agoMake econfig keys data and info work for relative names
Markus Armbruster [Sun, 3 Feb 2008 19:51:38 +0000 (20:51 +0100)]
Make econfig keys data and info work for relative names

File names in econfig need to be interpreted relative to configdir.
This wasn't the case everywhere for keys data and info.

Fix this by changing variables gamedir and infodir to hold absolute
names.  Change builtindir likewise, for consistency.  Store the values
from econfig in gamedir_conf, infodir_conf and builtindir_conf.

Uses new fnameat() to derive absolute names from possibly relative
ones.

16 years agoFix title and section header in manual pages
Markus Armbruster [Sun, 3 Feb 2008 12:53:22 +0000 (13:53 +0100)]
Fix title and section header in manual pages

Commit 530deef2 failed to update .TH of fairland(6), files(6) and
pconfig(6).

Commit 530deef2 failed to update .TH of empire(6).

Commit eeb9d3cb created empsched(6) with the wrong .TH.

16 years agoMake utility programs abort on internal error
Markus Armbruster [Sun, 3 Feb 2008 12:22:34 +0000 (13:22 +0100)]
Make utility programs abort on internal error

Until now, they tried to recover and continue (debug off).  That's
appropriate only for the server.  The server could be told to abort
instead (debug on, selected by option -d), but not the utility
programs.

Change debug to be on by default, and switch it off early in the
server's main().  No functional change for the server.

16 years agoFix unintentionally broad patterns in .gitignore
Markus Armbruster [Sun, 3 Feb 2008 07:57:41 +0000 (08:57 +0100)]
Fix unintentionally broad patterns in .gitignore

The patterns intended to match exactly weren't anchored.  In
particular, pattern lib make anything below src/lib/ invisible.
Anchor them all.

16 years agoSwitch nightlybuilds to git
Ron Koenderink [Tue, 5 Feb 2008 02:26:46 +0000 (20:26 -0600)]
Switch nightlybuilds to git

Create a local git repository on the SuSE nightly build machine.
Update local git repository from the Markus's public repository
at the beginnning of the nightlybuilds for SuSE and WIN32.
For the SuSE and WIN32 nightlybuilds drawn from the local
git repository on SuSE machine.

16 years agoClean up library dependencies
Markus Armbruster [Sat, 2 Feb 2008 20:03:12 +0000 (21:03 +0100)]
Clean up library dependencies

Move stuff to untangle the ugly cyclic dependencies between the
archives built for selected subdirectories of src/lib/:

* Move common/io.c to empthread/ because it requires empthread stuff

* Move parts of subs/nstr.c to common/nstreval.c to satisfy
  common/ef_verify.o

* Move getstarg.c getstring.c onearg.c from gen/ to subs/ because they
  require stuff from there

* Move bridgefall.c check.c damage.c empobj.c journal.c maps.c
  sectdamage.c from common/ to subs/ because they require stuff from
  there

* Move cnumb.c from subs/ to common/ to satisfy common/type.o

* Move log.c fsize.c from common/ to gen/ because they really belong
  there

* Move emp_config.c mapdist.c from gen/ to common/ because they really
  belong there, and require stuff from libglobal.a

Also package as/ as libas.a to satisfy common/path.o.

Remaining dependencies:

    lib             needs
    --------------------------------------------
    libas.a         libglobal.a
    libcommon.a     libas.a libglobal.a libgen.a
    libgen.a
    libglobal.a
    liblwp.a        libgen.a
    libw32.a[*]     libgen.a

    [*] Except for service.o, which can only be linked into the server

Link order now: liblwp.a libcommon.a libas.a libgen.a libglobal.a
libw32.a.  The position of libw32.a is not quite right, but works
anyway.

16 years agoGet rid of src/lib/gen/copy.c
Markus Armbruster [Sat, 2 Feb 2008 20:52:01 +0000 (21:52 +0100)]
Get rid of src/lib/gen/copy.c

The function that gave its name to this file is long gone, the file's
description is bogus, and it contains just one definition.  Move that
to ../subs/border.c, and delete the file.

16 years agoGet rid of src/lib/common/land.c
Markus Armbruster [Sat, 2 Feb 2008 20:36:37 +0000 (21:36 +0100)]
Get rid of src/lib/common/land.c

There are several files with land unit subroutines.  This one is in an
awkward place: it depends on stuff from ../subs, which contributes to
libcommon.a's ugly dependencies.  Move its contents to logical places
(use internal linkage where possible), and remove it.

16 years agoDocument econfig key info setting for running without installing
Markus Armbruster [Sat, 2 Feb 2008 15:15:40 +0000 (16:15 +0100)]
Document econfig key info setting for running without installing

16 years agoRemove telfil, use teldir instead.
Markus Armbruster [Sat, 2 Feb 2008 08:22:10 +0000 (09:22 +0100)]
Remove telfil, use teldir instead.

16 years agoBelatedly update c_form of of show command
Markus Armbruster [Sat, 2 Feb 2008 06:56:49 +0000 (07:56 +0100)]
Belatedly update c_form of of show command

It lacked item and news since 4.3.0.

16 years agoTrim extra newline from documentation of econfig key update_demand
Markus Armbruster [Sat, 2 Feb 2008 06:53:19 +0000 (07:53 +0100)]
Trim extra newline from documentation of econfig key update_demand

16 years agoRemove unused non-terminal <VAR> from output of list command
Markus Armbruster [Sat, 2 Feb 2008 06:50:26 +0000 (07:50 +0100)]
Remove unused non-terminal <VAR> from output of list command

It's been unused since commit 5dec30d6, and its explanation was bogus
before.

16 years agoAdd missing expansion island
Ron Koenderink [Fri, 25 Jan 2008 14:12:49 +0000 (08:12 -0600)]
Add missing expansion island

The number of islands was off by one.  The last island was
created, but not actually placed on the map.

16 years agoFix empsched's name in its manual page
Markus Armbruster [Sat, 19 Jan 2008 09:32:02 +0000 (10:32 +0100)]
Fix empsched's name in its manual page

16 years agoUpdate copyright notice
Markus Armbruster [Sat, 19 Jan 2008 09:15:37 +0000 (10:15 +0100)]
Update copyright notice

16 years agoRemove bogus comment
Markus Armbruster [Sat, 19 Jan 2008 08:00:32 +0000 (09:00 +0100)]
Remove bogus comment

16 years agoNote generator script in output
Markus Armbruster [Thu, 17 Jan 2008 21:12:55 +0000 (22:12 +0100)]
Note generator script in output

16 years agoFix bogus file names in error messages
Markus Armbruster [Sun, 13 Jan 2008 10:25:32 +0000 (11:25 +0100)]
Fix bogus file names in error messages