summaryrefslogtreecommitdiffstats
path: root/crawl-ref
diff options
context:
space:
mode:
authorNicholas Feinberg <pleasingfung@gmail.com>2014-07-29 21:51:57 -0700
committerNicholas Feinberg <pleasingfung@gmail.com>2014-07-29 23:01:10 -0700
commite048ef1f5268c90ea3a4a0604083c253b20fdd6b (patch)
tree97c67ad5898ee7c3bc71e53c86efab7f126440ec /crawl-ref
parent9cedde55d9b5b82ba9c22a49ffa425ad4d7b369b (diff)
downloadcrawl-ref-e048ef1f5268c90ea3a4a0604083c253b20fdd6b.tar.gz
crawl-ref-e048ef1f5268c90ea3a4a0604083c253b20fdd6b.zip
Remove stuff
.cc, moving its contents into the new stepdown.cc and strings.cc. (The latter also got many donations from libutil.h.) Down with stuff! Up the new flesh!
Diffstat (limited to 'crawl-ref')
-rw-r--r--crawl-ref/source/MSVC/crawl.vcxproj6
-rw-r--r--crawl-ref/source/MSVC/crawl.vcxproj.filters6
-rw-r--r--crawl-ref/source/Makefile.obj3
-rw-r--r--crawl-ref/source/ability.cc3
-rw-r--r--crawl-ref/source/abyss.cc1
-rw-r--r--crawl-ref/source/acquire.cc2
-rw-r--r--crawl-ref/source/actor.cc3
-rw-r--r--crawl-ref/source/areas.cc4
-rw-r--r--crawl-ref/source/arena.cc2
-rw-r--r--crawl-ref/source/artefact.cc3
-rw-r--r--crawl-ref/source/attack.cc4
-rw-r--r--crawl-ref/source/beam.cc3
-rw-r--r--crawl-ref/source/butcher.cc2
-rw-r--r--crawl-ref/source/chardump.cc4
-rw-r--r--crawl-ref/source/cio.cc3
-rw-r--r--crawl-ref/source/clua.cc3
-rw-r--r--crawl-ref/source/colour.cc1
-rw-r--r--crawl-ref/source/command.cc4
-rw-r--r--crawl-ref/source/crash.cc4
-rw-r--r--crawl-ref/source/ctest.cc1
-rw-r--r--crawl-ref/source/database.cc1
-rw-r--r--crawl-ref/source/dbg-asrt.cc2
-rw-r--r--crawl-ref/source/dbg-maps.cc1
-rw-r--r--crawl-ref/source/dbg-scan.cc3
-rw-r--r--crawl-ref/source/dbg-util.cc1
-rw-r--r--crawl-ref/source/decks.cc2
-rw-r--r--crawl-ref/source/delay.cc2
-rw-r--r--crawl-ref/source/describe.cc3
-rw-r--r--crawl-ref/source/dgn-layouts.cc1
-rw-r--r--crawl-ref/source/dgn-overview.cc3
-rw-r--r--crawl-ref/source/dgn-shoals.cc1
-rw-r--r--crawl-ref/source/directn.cc2
-rw-r--r--crawl-ref/source/dlua.cc2
-rw-r--r--crawl-ref/source/dungeon.cc2
-rw-r--r--crawl-ref/source/effects.cc2
-rw-r--r--crawl-ref/source/end.cc2
-rw-r--r--crawl-ref/source/errors.cc2
-rw-r--r--crawl-ref/source/evoke.cc3
-rw-r--r--crawl-ref/source/exclude.cc1
-rw-r--r--crawl-ref/source/files.cc1
-rw-r--r--crawl-ref/source/food.cc3
-rw-r--r--crawl-ref/source/format.cc1
-rw-r--r--crawl-ref/source/ghost.cc1
-rw-r--r--crawl-ref/source/godabil.cc2
-rw-r--r--crawl-ref/source/godblessing.cc2
-rw-r--r--crawl-ref/source/godcompanions.cc2
-rw-r--r--crawl-ref/source/godpassive.cc3
-rw-r--r--crawl-ref/source/godprayer.cc3
-rw-r--r--crawl-ref/source/godwrath.cc1
-rw-r--r--crawl-ref/source/hints.cc2
-rw-r--r--crawl-ref/source/hiscores.cc2
-rw-r--r--crawl-ref/source/initfile.cc2
-rw-r--r--crawl-ref/source/invent.cc2
-rw-r--r--crawl-ref/source/item_use.cc2
-rw-r--r--crawl-ref/source/itemname.cc3
-rw-r--r--crawl-ref/source/itemprop.cc1
-rw-r--r--crawl-ref/source/items.cc2
-rw-r--r--crawl-ref/source/jobs.cc1
-rw-r--r--crawl-ref/source/l_crawl.cc2
-rw-r--r--crawl-ref/source/l_debug.cc1
-rw-r--r--crawl-ref/source/l_dgn.cc1
-rw-r--r--crawl-ref/source/l_dgnbld.cc1
-rw-r--r--crawl-ref/source/l_dgngrd.cc1
-rw-r--r--crawl-ref/source/l_dgnit.cc2
-rw-r--r--crawl-ref/source/l_dgnmon.cc1
-rw-r--r--crawl-ref/source/l_dgntil.cc1
-rw-r--r--crawl-ref/source/l_feat.cc1
-rw-r--r--crawl-ref/source/l_file.cc2
-rw-r--r--crawl-ref/source/l_item.cc2
-rw-r--r--crawl-ref/source/l_los.cc1
-rw-r--r--crawl-ref/source/l_moninf.cc1
-rw-r--r--crawl-ref/source/l_mons.cc1
-rw-r--r--crawl-ref/source/l_view.cc4
-rw-r--r--crawl-ref/source/l_you.cc2
-rw-r--r--crawl-ref/source/lang-fake.cc1
-rw-r--r--crawl-ref/source/libutil.cc390
-rw-r--r--crawl-ref/source/libutil.h113
-rw-r--r--crawl-ref/source/macro.cc2
-rw-r--r--crawl-ref/source/main.cc2
-rw-r--r--crawl-ref/source/makeitem.cc3
-rw-r--r--crawl-ref/source/mapdef.cc1
-rw-r--r--crawl-ref/source/mapmark.cc1
-rw-r--r--crawl-ref/source/maps.cc2
-rw-r--r--crawl-ref/source/melee_attack.cc2
-rw-r--r--crawl-ref/source/menu.cc2
-rw-r--r--crawl-ref/source/message.cc7
-rw-r--r--crawl-ref/source/misc.cc2
-rw-r--r--crawl-ref/source/mon-abil.cc2
-rw-r--r--crawl-ref/source/mon-act.cc2
-rw-r--r--crawl-ref/source/mon-behv.cc1
-rw-r--r--crawl-ref/source/mon-cast.cc5
-rw-r--r--crawl-ref/source/mon-clone.cc1
-rw-r--r--crawl-ref/source/mon-death.cc3
-rw-r--r--crawl-ref/source/mon-ench.cc3
-rw-r--r--crawl-ref/source/mon-info.cc1
-rw-r--r--crawl-ref/source/mon-pick.cc1
-rw-r--r--crawl-ref/source/mon-poly.cc1
-rw-r--r--crawl-ref/source/mon-project.cc2
-rw-r--r--crawl-ref/source/mon-speak.cc4
-rw-r--r--crawl-ref/source/mon-util.cc2
-rw-r--r--crawl-ref/source/monster.cc3
-rw-r--r--crawl-ref/source/mutation.cc3
-rw-r--r--crawl-ref/source/newgame.cc2
-rw-r--r--crawl-ref/source/ng-init.cc2
-rw-r--r--crawl-ref/source/ng-input.cc1
-rw-r--r--crawl-ref/source/ng-setup.cc2
-rw-r--r--crawl-ref/source/notes.cc2
-rw-r--r--crawl-ref/source/ouch.cc2
-rw-r--r--crawl-ref/source/output.cc2
-rw-r--r--crawl-ref/source/place.cc2
-rw-r--r--crawl-ref/source/player-reacts.cc2
-rw-r--r--crawl-ref/source/player-stats.cc1
-rw-r--r--crawl-ref/source/player.cc3
-rw-r--r--crawl-ref/source/potion.cc1
-rw-r--r--crawl-ref/source/process_desc.h2
-rw-r--r--crawl-ref/source/prompt.cc1
-rw-r--r--crawl-ref/source/quiver.cc3
-rw-r--r--crawl-ref/source/ranged_attack.cc1
-rw-r--r--crawl-ref/source/religion.cc2
-rw-r--r--crawl-ref/source/rot.cc4
-rw-r--r--crawl-ref/source/shopping.cc3
-rw-r--r--crawl-ref/source/shout.cc5
-rw-r--r--crawl-ref/source/showsymb.cc2
-rw-r--r--crawl-ref/source/skill_menu.cc4
-rw-r--r--crawl-ref/source/skills.cc2
-rw-r--r--crawl-ref/source/skills2.cc2
-rw-r--r--crawl-ref/source/spl-book.cc3
-rw-r--r--crawl-ref/source/spl-cast.cc4
-rw-r--r--crawl-ref/source/spl-damage.cc4
-rw-r--r--crawl-ref/source/spl-goditem.cc2
-rw-r--r--crawl-ref/source/spl-miscast.cc2
-rw-r--r--crawl-ref/source/spl-monench.cc2
-rw-r--r--crawl-ref/source/spl-other.cc2
-rw-r--r--crawl-ref/source/spl-selfench.cc2
-rw-r--r--crawl-ref/source/spl-summoning.cc3
-rw-r--r--crawl-ref/source/spl-transloc.cc2
-rw-r--r--crawl-ref/source/spl-util.cc2
-rw-r--r--crawl-ref/source/spl-zap.cc2
-rw-r--r--crawl-ref/source/stairs.cc1
-rw-r--r--crawl-ref/source/startup.cc2
-rw-r--r--crawl-ref/source/stash.cc2
-rw-r--r--crawl-ref/source/status.cc3
-rw-r--r--crawl-ref/source/stepdown.cc66
-rw-r--r--crawl-ref/source/stepdown.h (renamed from crawl-ref/source/stuff.h)14
-rw-r--r--crawl-ref/source/store.cc2
-rw-r--r--crawl-ref/source/strings.cc435
-rw-r--r--crawl-ref/source/strings.h96
-rw-r--r--crawl-ref/source/stuff.cc136
-rw-r--r--crawl-ref/source/tags.cc1
-rw-r--r--crawl-ref/source/terrain.cc1
-rw-r--r--crawl-ref/source/throw.cc2
-rw-r--r--crawl-ref/source/tilepick.cc1
-rw-r--r--crawl-ref/source/tilereg-abl.cc2
-rw-r--r--crawl-ref/source/tilereg-dgn.cc2
-rw-r--r--crawl-ref/source/tilereg-doll.cc2
-rw-r--r--crawl-ref/source/tilereg-inv.cc2
-rw-r--r--crawl-ref/source/tilereg-mem.cc3
-rw-r--r--crawl-ref/source/tilereg-mon.cc2
-rw-r--r--crawl-ref/source/tilereg-skl.cc2
-rw-r--r--crawl-ref/source/tilereg-spl.cc2
-rw-r--r--crawl-ref/source/tilereg-tab.cc5
-rw-r--r--crawl-ref/source/tileview.cc2
-rw-r--r--crawl-ref/source/tileweb.cc2
-rw-r--r--crawl-ref/source/transform.cc2
-rw-r--r--crawl-ref/source/traps.cc2
-rw-r--r--crawl-ref/source/travel.cc3
-rw-r--r--crawl-ref/source/tutorial.cc2
-rw-r--r--crawl-ref/source/unicode.h5
-rw-r--r--crawl-ref/source/util/levcomp.ypp2
-rw-r--r--crawl-ref/source/view.cc3
-rw-r--r--crawl-ref/source/viewgeom.cc2
-rw-r--r--crawl-ref/source/viewmap.cc2
-rw-r--r--crawl-ref/source/wiz-dgn.cc2
-rw-r--r--crawl-ref/source/wiz-fsim.cc2
-rw-r--r--crawl-ref/source/wiz-item.cc2
-rw-r--r--crawl-ref/source/wiz-mon.cc2
-rw-r--r--crawl-ref/source/wiz-you.cc2
-rw-r--r--crawl-ref/source/xom.cc3
-rw-r--r--crawl-ref/source/zotdef.cc2
179 files changed, 860 insertions, 769 deletions
diff --git a/crawl-ref/source/MSVC/crawl.vcxproj b/crawl-ref/source/MSVC/crawl.vcxproj
index 4bb41b5ae0..bb74832216 100644
--- a/crawl-ref/source/MSVC/crawl.vcxproj
+++ b/crawl-ref/source/MSVC/crawl.vcxproj
@@ -490,8 +490,9 @@ perl.exe "util/gen-cflg.pl" compflag.h "&lt;UNKNOWN&gt;" "&lt;UNKNOWN&gt;"
<ClCompile Include="..\stash.cc" />
<ClCompile Include="..\state.cc" />
<ClCompile Include="..\status.cc" />
+ <ClCompile Include="..\stepdown.cc" />
<ClCompile Include="..\store.cc" />
- <ClCompile Include="..\stuff.cc" />
+ <ClCompile Include="..\strings.cc" />
<ClCompile Include="..\syscalls.cc" />
<ClCompile Include="..\tags.cc" />
<ClCompile Include="..\target.cc" />
@@ -853,8 +854,9 @@ perl.exe "util/gen-cflg.pl" compflag.h "&lt;UNKNOWN&gt;" "&lt;UNKNOWN&gt;"
<ClInclude Include="..\stash.h" />
<ClInclude Include="..\state.h" />
<ClInclude Include="..\status.h" />
+ <ClCompile Include="..\stepdown.h" />
<ClInclude Include="..\store.h" />
- <ClInclude Include="..\stuff.h" />
+ <ClCompile Include="..\strings.h" />
<ClInclude Include="..\syscalls.h" />
<ClInclude Include="..\tag-version.h" />
<ClInclude Include="..\tags.h" />
diff --git a/crawl-ref/source/MSVC/crawl.vcxproj.filters b/crawl-ref/source/MSVC/crawl.vcxproj.filters
index a571299b78..d47cf34e87 100644
--- a/crawl-ref/source/MSVC/crawl.vcxproj.filters
+++ b/crawl-ref/source/MSVC/crawl.vcxproj.filters
@@ -226,8 +226,9 @@
<ClCompile Include="..\stash.cc" />
<ClCompile Include="..\state.cc" />
<ClCompile Include="..\status.cc" />
+ <ClCompile Include="..\stepdown.cc" />
<ClCompile Include="..\store.cc" />
- <ClCompile Include="..\stuff.cc" />
+ <ClCompile Include="..\strings.cc" />
<ClCompile Include="..\syscalls.cc" />
<ClCompile Include="..\tags.cc" />
<ClCompile Include="..\tagstring.cc" />
@@ -541,8 +542,9 @@
<ClInclude Include="..\stash.h" />
<ClInclude Include="..\state.h" />
<ClInclude Include="..\status.h" />
+ <ClCompile Include="..\stepdown.h" />
<ClInclude Include="..\store.h" />
- <ClInclude Include="..\stuff.h" />
+ <ClCompile Include="..\strings.cc" />
<ClInclude Include="..\syscalls.h" />
<ClInclude Include="..\tag-version.h" />
<ClInclude Include="..\tags.h" />
diff --git a/crawl-ref/source/Makefile.obj b/crawl-ref/source/Makefile.obj
index 62254d2a42..8b3d64d623 100644
--- a/crawl-ref/source/Makefile.obj
+++ b/crawl-ref/source/Makefile.obj
@@ -219,8 +219,9 @@ startup.o \
stash.o \
state.o \
status.o \
+stepdown.o \
store.o \
-stuff.o \
+strings.o \
syscalls.o \
tags.o \
target.o \
diff --git a/crawl-ref/source/ability.cc b/crawl-ref/source/ability.cc
index 24ca158f0f..4a52059827 100644
--- a/crawl-ref/source/ability.cc
+++ b/crawl-ref/source/ability.cc
@@ -71,7 +71,7 @@
#include "spl-miscast.h"
#include "stairs.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "target.h"
#include "tilepick.h"
#include "traps.h"
@@ -81,6 +81,7 @@
#include "terrain.h"
#include "traps.h"
#include "uncancel.h"
+#include "unicode.h"
#include "zotdef.h"
enum ability_flag_type
diff --git a/crawl-ref/source/abyss.cc b/crawl-ref/source/abyss.cc
index a64351bbce..e4b7dfc866 100644
--- a/crawl-ref/source/abyss.cc
+++ b/crawl-ref/source/abyss.cc
@@ -48,6 +48,7 @@
#include "shopping.h"
#include "stash.h"
#include "state.h"
+#include "strings.h"
#include "terrain.h"
#include "tiledef-dngn.h"
#include "tileview.h"
diff --git a/crawl-ref/source/acquire.cc b/crawl-ref/source/acquire.cc
index 7b62756cf4..b2912a4f95 100644
--- a/crawl-ref/source/acquire.cc
+++ b/crawl-ref/source/acquire.cc
@@ -40,7 +40,7 @@
#include "spl-book.h"
#include "spl-util.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "terrain.h"
static armour_type _random_nonbody_armour_type()
diff --git a/crawl-ref/source/actor.cc b/crawl-ref/source/actor.cc
index 4a422c8224..cedd87299d 100644
--- a/crawl-ref/source/actor.cc
+++ b/crawl-ref/source/actor.cc
@@ -21,7 +21,8 @@
#include "religion.h"
#include "random.h"
#include "state.h"
-#include "stuff.h"
+#include "stepdown.h"
+#include "strings.h"
#include "terrain.h"
#include "traps.h"
diff --git a/crawl-ref/source/areas.cc b/crawl-ref/source/areas.cc
index ec663af8d2..c5ff6afc84 100644
--- a/crawl-ref/source/areas.cc
+++ b/crawl-ref/source/areas.cc
@@ -17,6 +17,7 @@
#include "coordit.h"
#include "env.h"
#include "fprop.h"
+#include "godconduct.h"
#include "libutil.h"
#include "losglobal.h"
#include "mon-behv.h"
@@ -24,8 +25,7 @@
#include "monster.h"
#include "player.h"
#include "religion.h"
-#include "godconduct.h"
-#include "stuff.h"
+#include "stepdown.h"
#include "terrain.h"
#include "traps.h"
#include "travel.h"
diff --git a/crawl-ref/source/arena.cc b/crawl-ref/source/arena.cc
index 2302e9adde..9d82ef50ab 100644
--- a/crawl-ref/source/arena.cc
+++ b/crawl-ref/source/arena.cc
@@ -34,11 +34,13 @@
#include "spl-miscast.h"
#include "spl-util.h"
#include "state.h"
+#include "strings.h"
#include "teleport.h"
#include "terrain.h"
#ifdef USE_TILE
#include "tileview.h"
#endif
+#include "unicode.h"
#include "version.h"
#include "view.h"
#include "viewgeom.h"
diff --git a/crawl-ref/source/artefact.cc b/crawl-ref/source/artefact.cc
index 4d2336e0ee..0aa8aa8ec8 100644
--- a/crawl-ref/source/artefact.cc
+++ b/crawl-ref/source/artefact.cc
@@ -33,7 +33,8 @@
#include "species.h"
#include "spl-book.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
+#include "unicode.h"
static bool _god_fits_artefact(const god_type which_god, const item_def &item,
bool name_check_only = false)
diff --git a/crawl-ref/source/attack.cc b/crawl-ref/source/attack.cc
index a11f4a61c8..30f7993fbd 100644
--- a/crawl-ref/source/attack.cc
+++ b/crawl-ref/source/attack.cc
@@ -38,7 +38,9 @@
#include "spl-miscast.h"
#include "spl-util.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
+#include "stepdown.h"
+
#include "xom.h"
/*
diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc
index cc7b97b2d6..e808df960f 100644
--- a/crawl-ref/source/beam.cc
+++ b/crawl-ref/source/beam.cc
@@ -67,7 +67,8 @@
#include "spl-transloc.h"
#include "spl-summoning.h"
#include "state.h"
-#include "stuff.h"
+#include "stepdown.h"
+#include "strings.h"
#include "target.h"
#include "teleport.h"
#include "terrain.h"
diff --git a/crawl-ref/source/butcher.cc b/crawl-ref/source/butcher.cc
index 1cd6197d3d..cd3f212830 100644
--- a/crawl-ref/source/butcher.cc
+++ b/crawl-ref/source/butcher.cc
@@ -17,7 +17,7 @@
#include "mon-death.h"
#include "random.h"
#include "rot.h"
-#include "stuff.h"
+#include "stepdown.h"
static void _create_monster_hide(const item_def corpse)
{
diff --git a/crawl-ref/source/chardump.cc b/crawl-ref/source/chardump.cc
index 69fc49c0cd..e073648ecd 100644
--- a/crawl-ref/source/chardump.cc
+++ b/crawl-ref/source/chardump.cc
@@ -28,6 +28,7 @@
#include "describe.h"
#include "dgn-overview.h"
#include "dungeon.h"
+#include "env.h"
#include "fight.h"
#include "files.h"
#include "godprayer.h"
@@ -55,8 +56,7 @@
#include "spl-util.h"
#include "stash.h"
#include "state.h"
-#include "stuff.h"
-#include "env.h"
+#include "strings.h"
#include "transform.h"
#include "travel.h"
#include "unicode.h"
diff --git a/crawl-ref/source/cio.cc b/crawl-ref/source/cio.cc
index 090f0ea0c5..0f47213db5 100644
--- a/crawl-ref/source/cio.cc
+++ b/crawl-ref/source/cio.cc
@@ -7,11 +7,12 @@
#include "cio.h"
#include "externs.h"
-#include "options.h"
#include "libutil.h"
#include "macro.h"
#include "message.h"
+#include "options.h"
#include "state.h"
+#include "strings.h"
#include "unicode.h"
#include "viewgeom.h"
diff --git a/crawl-ref/source/clua.cc b/crawl-ref/source/clua.cc
index e8f4cfef9f..8ab716d8d6 100644
--- a/crawl-ref/source/clua.cc
+++ b/crawl-ref/source/clua.cc
@@ -10,7 +10,8 @@
#include "files.h"
#include "libutil.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
+
#include "syscalls.h"
#include "unicode.h"
diff --git a/crawl-ref/source/colour.cc b/crawl-ref/source/colour.cc
index 5c3f3bbf22..f3dc37b4db 100644
--- a/crawl-ref/source/colour.cc
+++ b/crawl-ref/source/colour.cc
@@ -14,6 +14,7 @@
#include "options.h"
#include "player.h"
#include "random.h"
+#include "strings.h"
#include <utility>
#include <math.h>
diff --git a/crawl-ref/source/command.cc b/crawl-ref/source/command.cc
index 34f05d88e6..590b17f9c6 100644
--- a/crawl-ref/source/command.cc
+++ b/crawl-ref/source/command.cc
@@ -47,7 +47,9 @@
#include "spl-cast.h"
#include "spl-util.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
+#include "unicode.h"
+
#include "env.h"
#include "syscalls.h"
#include "terrain.h"
diff --git a/crawl-ref/source/crash.cc b/crawl-ref/source/crash.cc
index c1ab74789b..8ce7fa6c62 100644
--- a/crawl-ref/source/crash.cc
+++ b/crawl-ref/source/crash.cc
@@ -5,6 +5,8 @@
#include "AppHdr.h"
+#include "strings.h"
+
#ifdef USE_UNIX_SIGNALS
#include <signal.h>
#include <sys/time.h>
@@ -72,7 +74,7 @@ template <typename TO, typename FROM> TO nasty_cast(FROM f)
#include "initfile.h"
#include "options.h"
#include "state.h"
-#include "stuff.h"
+
#include "syscalls.h"
#include "threads.h"
diff --git a/crawl-ref/source/ctest.cc b/crawl-ref/source/ctest.cc
index 07b3924200..63318f84dc 100644
--- a/crawl-ref/source/ctest.cc
+++ b/crawl-ref/source/ctest.cc
@@ -31,6 +31,7 @@
#include "mon-util.h"
#include "ng-init.h"
#include "state.h"
+#include "strings.h"
#include "zotdef.h"
#include <algorithm>
diff --git a/crawl-ref/source/database.cc b/crawl-ref/source/database.cc
index 0cd1ad85a1..89795ac0d6 100644
--- a/crawl-ref/source/database.cc
+++ b/crawl-ref/source/database.cc
@@ -23,6 +23,7 @@
#include "options.h"
#include "random.h"
#include "syscalls.h"
+#include "strings.h"
#include "threads.h"
#include "unicode.h"
diff --git a/crawl-ref/source/dbg-asrt.cc b/crawl-ref/source/dbg-asrt.cc
index e2cd77c5ab..2d1375c6aa 100644
--- a/crawl-ref/source/dbg-asrt.cc
+++ b/crawl-ref/source/dbg-asrt.cc
@@ -34,7 +34,7 @@
#include "spl-cast.h"
#include "spl-util.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "travel.h"
#include "hiscores.h"
#include "version.h"
diff --git a/crawl-ref/source/dbg-maps.cc b/crawl-ref/source/dbg-maps.cc
index 15a8667c57..44caa43edf 100644
--- a/crawl-ref/source/dbg-maps.cc
+++ b/crawl-ref/source/dbg-maps.cc
@@ -20,6 +20,7 @@
#include "ng-init.h"
#include "player.h"
#include "state.h"
+#include "strings.h"
#include "view.h"
#ifdef DEBUG_DIAGNOSTICS
diff --git a/crawl-ref/source/dbg-scan.cc b/crawl-ref/source/dbg-scan.cc
index e3ab7698de..84c9358316 100644
--- a/crawl-ref/source/dbg-scan.cc
+++ b/crawl-ref/source/dbg-scan.cc
@@ -36,7 +36,8 @@
#include "ng-init.h"
#include "shopping.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
+#include "stepdown.h"
#include "terrain.h"
#include "traps.h"
#include "version.h"
diff --git a/crawl-ref/source/dbg-util.cc b/crawl-ref/source/dbg-util.cc
index 838aab8fd8..1eebe1cae7 100644
--- a/crawl-ref/source/dbg-util.cc
+++ b/crawl-ref/source/dbg-util.cc
@@ -23,6 +23,7 @@
#include "skills2.h"
#include "spl-util.h"
#include "state.h"
+#include "strings.h"
monster_type debug_prompt_for_monster()
{
diff --git a/crawl-ref/source/decks.cc b/crawl-ref/source/decks.cc
index b3577466e0..8a0024529e 100644
--- a/crawl-ref/source/decks.cc
+++ b/crawl-ref/source/decks.cc
@@ -71,7 +71,7 @@
#include "spl-util.h"
#include "spl-wpnench.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "terrain.h"
#include "transform.h"
#include "traps.h"
diff --git a/crawl-ref/source/delay.cc b/crawl-ref/source/delay.cc
index a923060aaa..a6a10ccaf8 100644
--- a/crawl-ref/source/delay.cc
+++ b/crawl-ref/source/delay.cc
@@ -59,7 +59,7 @@
#include "stairs.h"
#include "stash.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "env.h"
#include "teleport.h"
#include "transform.h"
diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc
index 1cb5e08adb..16b8679a68 100644
--- a/crawl-ref/source/describe.cc
+++ b/crawl-ref/source/describe.cc
@@ -57,7 +57,8 @@
#include "spl-book.h"
#include "spl-summoning.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
+#include "unicode.h"
#include "env.h"
#include "spl-cast.h"
#include "spl-util.h"
diff --git a/crawl-ref/source/dgn-layouts.cc b/crawl-ref/source/dgn-layouts.cc
index 765f9f89c8..730b5ece3a 100644
--- a/crawl-ref/source/dgn-layouts.cc
+++ b/crawl-ref/source/dgn-layouts.cc
@@ -11,6 +11,7 @@
#include "coordit.h"
#include "dungeon.h"
#include "libutil.h"
+#include "strings.h"
#include "terrain.h"
#include "traps.h"
diff --git a/crawl-ref/source/dgn-overview.cc b/crawl-ref/source/dgn-overview.cc
index 1ae7c6ebfd..216f78ad17 100644
--- a/crawl-ref/source/dgn-overview.cc
+++ b/crawl-ref/source/dgn-overview.cc
@@ -31,9 +31,10 @@
#include "shopping.h"
#include "stairs.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "terrain.h"
#include "travel.h"
+#include "unicode.h"
typedef map<branch_type, set<level_id> > stair_map_type;
typedef map<level_pos, shop_type> shop_map_type;
diff --git a/crawl-ref/source/dgn-shoals.cc b/crawl-ref/source/dgn-shoals.cc
index b998fa2ddd..f8aa41d8aa 100644
--- a/crawl-ref/source/dgn-shoals.cc
+++ b/crawl-ref/source/dgn-shoals.cc
@@ -21,6 +21,7 @@
#include "mon-util.h"
#include "random.h"
#include "state.h"
+#include "strings.h"
#include "terrain.h"
#include "traps.h"
#include "view.h"
diff --git a/crawl-ref/source/directn.cc b/crawl-ref/source/directn.cc
index 96c14ecc83..fd16fef111 100644
--- a/crawl-ref/source/directn.cc
+++ b/crawl-ref/source/directn.cc
@@ -53,7 +53,7 @@
#include "env.h"
#include "areas.h"
#include "stash.h"
-#include "stuff.h"
+#include "strings.h"
#include "target.h"
#ifdef USE_TILE
#include "tileview.h"
diff --git a/crawl-ref/source/dlua.cc b/crawl-ref/source/dlua.cc
index d2282ac6f3..563ad40d85 100644
--- a/crawl-ref/source/dlua.cc
+++ b/crawl-ref/source/dlua.cc
@@ -9,7 +9,7 @@
#include "dlua.h"
#include "l_libs.h"
-#include "libutil.h"
+#include "strings.h"
#include "tags.h"
static int dlua_compiled_chunk_writer(lua_State *ls, const void *p,
diff --git a/crawl-ref/source/dungeon.cc b/crawl-ref/source/dungeon.cc
index 0b5bd482c5..786e45e3f9 100644
--- a/crawl-ref/source/dungeon.cc
+++ b/crawl-ref/source/dungeon.cc
@@ -76,7 +76,7 @@
#include "spl-util.h"
#include "stairs.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "tags.h"
#include "terrain.h"
#include "tiledef-dngn.h"
diff --git a/crawl-ref/source/effects.cc b/crawl-ref/source/effects.cc
index 6a84a680d9..f8c4910ca1 100644
--- a/crawl-ref/source/effects.cc
+++ b/crawl-ref/source/effects.cc
@@ -80,7 +80,7 @@
#include "spl-util.h"
#include "stairs.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "terrain.h"
#include "transform.h"
#include "traps.h"
diff --git a/crawl-ref/source/end.cc b/crawl-ref/source/end.cc
index f7d0ee6e59..206247b7ec 100644
--- a/crawl-ref/source/end.cc
+++ b/crawl-ref/source/end.cc
@@ -29,7 +29,7 @@
#include "prompt.h"
#include "religion.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "view.h"
#include "xom.h"
diff --git a/crawl-ref/source/errors.cc b/crawl-ref/source/errors.cc
index b273e70d31..1b27e0fd2d 100644
--- a/crawl-ref/source/errors.cc
+++ b/crawl-ref/source/errors.cc
@@ -9,7 +9,7 @@
#include "AppHdr.h"
#include "errors.h"
-#include "libutil.h"
+#include "strings.h"
NORETURN void fail(const char *msg, ...)
{
diff --git a/crawl-ref/source/evoke.cc b/crawl-ref/source/evoke.cc
index ed63e5bfb6..64668e66aa 100644
--- a/crawl-ref/source/evoke.cc
+++ b/crawl-ref/source/evoke.cc
@@ -51,10 +51,11 @@
#include "spl-clouds.h"
#include "spl-util.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "target.h"
#include "terrain.h"
#include "traps.h"
+#include "unicode.h"
#include "view.h"
#include "viewchar.h"
#include "xom.h"
diff --git a/crawl-ref/source/exclude.cc b/crawl-ref/source/exclude.cc
index da847dec58..08fbc3232e 100644
--- a/crawl-ref/source/exclude.cc
+++ b/crawl-ref/source/exclude.cc
@@ -19,6 +19,7 @@
#include "mon-util.h"
#include "options.h"
#include "env.h"
+#include "strings.h"
#include "tags.h"
#include "terrain.h"
#include "travel.h"
diff --git a/crawl-ref/source/files.cc b/crawl-ref/source/files.cc
index 89a09001a3..949b778ca7 100644
--- a/crawl-ref/source/files.cc
+++ b/crawl-ref/source/files.cc
@@ -80,6 +80,7 @@
#include "spl-summoning.h"
#include "stash.h"
#include "state.h"
+#include "strings.h"
#include "syscalls.h"
#include "tags.h"
#ifdef USE_TILE
diff --git a/crawl-ref/source/food.cc b/crawl-ref/source/food.cc
index a0a9919e5a..927e953cca 100644
--- a/crawl-ref/source/food.cc
+++ b/crawl-ref/source/food.cc
@@ -53,7 +53,8 @@
#include "skills2.h"
#include "spl-util.h"
#include "state.h"
-#include "stuff.h"
+#include "stepdown.h"
+#include "strings.h"
#include "transform.h"
#include "travel.h"
#include "xom.h"
diff --git a/crawl-ref/source/format.cc b/crawl-ref/source/format.cc
index a62df240f4..6efa793241 100644
--- a/crawl-ref/source/format.cc
+++ b/crawl-ref/source/format.cc
@@ -6,6 +6,7 @@
#include "format.h"
#include "libutil.h"
#include "lang-fake.h"
+#include "strings.h"
#include "unicode.h"
#include "viewchar.h"
diff --git a/crawl-ref/source/ghost.cc b/crawl-ref/source/ghost.cc
index 75aa226b37..8f564535c0 100644
--- a/crawl-ref/source/ghost.cc
+++ b/crawl-ref/source/ghost.cc
@@ -21,6 +21,7 @@
#include "skills2.h"
#include "spl-cast.h"
#include "spl-util.h"
+#include "strings.h"
#include "mon-util.h"
#include "mon-transit.h"
#include "player.h"
diff --git a/crawl-ref/source/godabil.cc b/crawl-ref/source/godabil.cc
index 3b7cc8bf11..31a96f0b05 100644
--- a/crawl-ref/source/godabil.cc
+++ b/crawl-ref/source/godabil.cc
@@ -71,7 +71,7 @@
#include "spl-util.h"
#include "stash.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "target.h"
#include "terrain.h"
#include "throw.h"
diff --git a/crawl-ref/source/godblessing.cc b/crawl-ref/source/godblessing.cc
index fa794adfc7..ba2fe06f6b 100644
--- a/crawl-ref/source/godblessing.cc
+++ b/crawl-ref/source/godblessing.cc
@@ -12,7 +12,6 @@
#include "itemprop.h" // do_uncurse()
#include "item_use.h"
#include "items.h" // items_stack()
-#include "libutil.h" // make_stringf()
#include "makeitem.h" // item_set_appearance()
#include "mgen_data.h"
#include "monster.h"
@@ -20,6 +19,7 @@
#include "mon-place.h" // create_monster()
#include "mon-util.h" // give_monster_proper_name()
#include "religion.h"
+#include "strings.h" // make_stringf
#include "view.h" // flash_monster_colour
/**
diff --git a/crawl-ref/source/godcompanions.cc b/crawl-ref/source/godcompanions.cc
index a8c83aed14..ae118d9e6a 100644
--- a/crawl-ref/source/godcompanions.cc
+++ b/crawl-ref/source/godcompanions.cc
@@ -13,7 +13,7 @@
#include "mon-message.h"
#include "mon-util.h"
#include "religion.h"
-#include "stuff.h"
+#include "strings.h"
#include "spl-other.h"
#include "branch.h"
diff --git a/crawl-ref/source/godpassive.cc b/crawl-ref/source/godpassive.cc
index ea6ba76e32..7bb7031207 100644
--- a/crawl-ref/source/godpassive.cc
+++ b/crawl-ref/source/godpassive.cc
@@ -19,12 +19,13 @@
#include "items.h"
#include "itemname.h"
#include "itemprop.h"
-#include "libutil.h"
+#include "libutil.h" // testbits
#include "player.h"
#include "religion.h"
#include "shout.h"
#include "skills2.h"
#include "state.h"
+#include "strings.h"
#include "terrain.h"
#include "travel.h"
diff --git a/crawl-ref/source/godprayer.cc b/crawl-ref/source/godprayer.cc
index 035530780a..a4303ce00f 100644
--- a/crawl-ref/source/godprayer.cc
+++ b/crawl-ref/source/godprayer.cc
@@ -33,7 +33,8 @@
#include "skills2.h"
#include "state.h"
#include "spl-wpnench.h"
-#include "stuff.h"
+#include "stepdown.h"
+#include "strings.h"
#include "terrain.h"
#include "unwind.h"
#include "view.h"
diff --git a/crawl-ref/source/godwrath.cc b/crawl-ref/source/godwrath.cc
index abd5c8acad..1d9eceb9f6 100644
--- a/crawl-ref/source/godwrath.cc
+++ b/crawl-ref/source/godwrath.cc
@@ -49,6 +49,7 @@
#include "spl-summoning.h"
#include "spl-transloc.h"
#include "state.h"
+#include "strings.h"
#include "transform.h"
#include "shout.h"
#include "view.h"
diff --git a/crawl-ref/source/hints.cc b/crawl-ref/source/hints.cc
index efb48c32d6..c0da00ab94 100644
--- a/crawl-ref/source/hints.cc
+++ b/crawl-ref/source/hints.cc
@@ -50,7 +50,7 @@
#include "species.h"
#include "spl-book.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "env.h"
#include "tags.h"
#include "terrain.h"
diff --git a/crawl-ref/source/hiscores.cc b/crawl-ref/source/hiscores.cc
index 93fbd2266a..07626ace71 100644
--- a/crawl-ref/source/hiscores.cc
+++ b/crawl-ref/source/hiscores.cc
@@ -47,7 +47,7 @@
#include "species.h"
#include "state.h"
#include "status.h"
-#include "stuff.h"
+#include "strings.h"
#include "env.h"
#include "tags.h"
#include "unwind.h"
diff --git a/crawl-ref/source/initfile.cc b/crawl-ref/source/initfile.cc
index 8f06f1c5c3..fbcb91ff8e 100644
--- a/crawl-ref/source/initfile.cc
+++ b/crawl-ref/source/initfile.cc
@@ -48,7 +48,7 @@
#include "spl-util.h"
#include "stash.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "syscalls.h"
#include "tags.h"
#include "throw.h"
diff --git a/crawl-ref/source/invent.cc b/crawl-ref/source/invent.cc
index 3e0ac85935..6d474657fb 100644
--- a/crawl-ref/source/invent.cc
+++ b/crawl-ref/source/invent.cc
@@ -37,7 +37,7 @@
#include "religion.h"
#include "shopping.h"
#include "showsymb.h"
-#include "stuff.h"
+#include "strings.h"
#include "mon-util.h"
#include "state.h"
#include "throw.h"
diff --git a/crawl-ref/source/item_use.cc b/crawl-ref/source/item_use.cc
index ce08f42c1a..c865feb037 100644
--- a/crawl-ref/source/item_use.cc
+++ b/crawl-ref/source/item_use.cc
@@ -62,7 +62,7 @@
#include "spl-transloc.h"
#include "spl-wpnench.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "target.h"
#include "terrain.h"
#include "throw.h"
diff --git a/crawl-ref/source/itemname.cc b/crawl-ref/source/itemname.cc
index 3207dd39b3..7262ea90c1 100644
--- a/crawl-ref/source/itemname.cc
+++ b/crawl-ref/source/itemname.cc
@@ -43,9 +43,10 @@
#include "spl-book.h"
#include "spl-summoning.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "throw.h"
#include "transform.h"
+#include "unicode.h"
static bool _is_random_name_space(char let);
static bool _is_random_name_vowel(char let);
diff --git a/crawl-ref/source/itemprop.cc b/crawl-ref/source/itemprop.cc
index 5f8fb359e1..d213fb7929 100644
--- a/crawl-ref/source/itemprop.cc
+++ b/crawl-ref/source/itemprop.cc
@@ -37,6 +37,7 @@
#include "quiver.h"
#include "random.h"
#include "shopping.h"
+#include "strings.h"
#include "terrain.h"
#include "xom.h"
diff --git a/crawl-ref/source/items.cc b/crawl-ref/source/items.cc
index 1122470135..eab57f83ad 100644
--- a/crawl-ref/source/items.cc
+++ b/crawl-ref/source/items.cc
@@ -66,7 +66,7 @@
#include "spl-book.h"
#include "spl-util.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "areas.h"
#include "stash.h"
#include "state.h"
diff --git a/crawl-ref/source/jobs.cc b/crawl-ref/source/jobs.cc
index c6a9ef3297..561e63eef1 100644
--- a/crawl-ref/source/jobs.cc
+++ b/crawl-ref/source/jobs.cc
@@ -3,6 +3,7 @@
#include "jobs.h"
#include "libutil.h"
+#include "strings.h"
static const char * Job_Abbrev_List[] =
{ "Fi", "Wz",
diff --git a/crawl-ref/source/l_crawl.cc b/crawl-ref/source/l_crawl.cc
index c6b24e482f..4e21da7e09 100644
--- a/crawl-ref/source/l_crawl.cc
+++ b/crawl-ref/source/l_crawl.cc
@@ -40,7 +40,7 @@ module "crawl"
#include "random.h"
#include "religion.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "tutorial.h"
#include "view.h"
#include "worley.h"
diff --git a/crawl-ref/source/l_debug.cc b/crawl-ref/source/l_debug.cc
index afba1691e1..aa16304e3e 100644
--- a/crawl-ref/source/l_debug.cc
+++ b/crawl-ref/source/l_debug.cc
@@ -28,6 +28,7 @@
#include "religion.h"
#include "stairs.h"
#include "state.h"
+#include "strings.h"
#include "tileview.h"
#include "view.h"
#include "wiz-dgn.h"
diff --git a/crawl-ref/source/l_dgn.cc b/crawl-ref/source/l_dgn.cc
index 21cc1ff9fb..f4bd67d4ce 100644
--- a/crawl-ref/source/l_dgn.cc
+++ b/crawl-ref/source/l_dgn.cc
@@ -23,6 +23,7 @@
#include "shout.h"
#include "spl-util.h"
#include "state.h"
+#include "strings.h"
#include "tiledef-dngn.h"
#include "tileview.h"
#include "unwind.h"
diff --git a/crawl-ref/source/l_dgnbld.cc b/crawl-ref/source/l_dgnbld.cc
index 6572da03e4..26f6bcc038 100644
--- a/crawl-ref/source/l_dgnbld.cc
+++ b/crawl-ref/source/l_dgnbld.cc
@@ -20,6 +20,7 @@
#include "l_libs.h"
#include "mapdef.h"
#include "random.h"
+#include "strings.h"
static const char *exit_glyphs = "{}()[]<>@";
diff --git a/crawl-ref/source/l_dgngrd.cc b/crawl-ref/source/l_dgngrd.cc
index 67adee1ae4..712bf81232 100644
--- a/crawl-ref/source/l_dgngrd.cc
+++ b/crawl-ref/source/l_dgngrd.cc
@@ -15,6 +15,7 @@
#include "env.h"
#include "libutil.h"
#include "state.h"
+#include "strings.h"
#include "terrain.h"
static int dgn_feature_number(lua_State *ls)
diff --git a/crawl-ref/source/l_dgnit.cc b/crawl-ref/source/l_dgnit.cc
index 8c392c47ad..5adb464d01 100644
--- a/crawl-ref/source/l_dgnit.cc
+++ b/crawl-ref/source/l_dgnit.cc
@@ -12,9 +12,9 @@
#include "dungeon.h"
#include "env.h"
#include "items.h"
-#include "libutil.h"
#include "mapdef.h"
#include "stash.h"
+#include "strings.h"
#define ITEMLIST_METATABLE "crawldgn.item_list"
diff --git a/crawl-ref/source/l_dgnmon.cc b/crawl-ref/source/l_dgnmon.cc
index 65385bbdc8..6d38637c9e 100644
--- a/crawl-ref/source/l_dgnmon.cc
+++ b/crawl-ref/source/l_dgnmon.cc
@@ -16,6 +16,7 @@
#include "mon-death.h"
#include "mon-place.h"
#include "mon-util.h"
+#include "strings.h"
#define MONSLIST_METATABLE "crawldgn.monster_list"
diff --git a/crawl-ref/source/l_dgntil.cc b/crawl-ref/source/l_dgntil.cc
index 605f8cb1bd..c93e931172 100644
--- a/crawl-ref/source/l_dgntil.cc
+++ b/crawl-ref/source/l_dgntil.cc
@@ -16,6 +16,7 @@
#include "env.h"
#include "tiledef-dngn.h"
#include "tileview.h"
+#include "strings.h"
tileidx_t get_tile_idx(lua_State *ls, int arg)
{
diff --git a/crawl-ref/source/l_feat.cc b/crawl-ref/source/l_feat.cc
index db06fce096..2609c5d115 100644
--- a/crawl-ref/source/l_feat.cc
+++ b/crawl-ref/source/l_feat.cc
@@ -13,6 +13,7 @@
#include "env.h"
#include "libutil.h"
#include "terrain.h"
+#include "strings.h"
#define FEATF(name, val) \
static int name(lua_State *ls) \
diff --git a/crawl-ref/source/l_file.cc b/crawl-ref/source/l_file.cc
index 3a0a6a4d47..96ad5c9fc3 100644
--- a/crawl-ref/source/l_file.cc
+++ b/crawl-ref/source/l_file.cc
@@ -6,7 +6,7 @@
#include "l_libs.h"
#include "libutil.h"
#include "files.h"
-
+#include "strings.h"
#include "tags.h"
///////////////////////////////////////////////////////////
diff --git a/crawl-ref/source/l_item.cc b/crawl-ref/source/l_item.cc
index 845c60577a..79075ecfac 100644
--- a/crawl-ref/source/l_item.cc
+++ b/crawl-ref/source/l_item.cc
@@ -30,7 +30,7 @@
#include "skills2.h"
#include "spl-summoning.h"
#include "stash.h"
-#include "stuff.h"
+#include "strings.h"
#include "throw.h"
/////////////////////////////////////////////////////////////////////
diff --git a/crawl-ref/source/l_los.cc b/crawl-ref/source/l_los.cc
index 795e73f6c4..c3d18ec218 100644
--- a/crawl-ref/source/l_los.cc
+++ b/crawl-ref/source/l_los.cc
@@ -13,6 +13,7 @@
#include "los.h"
#include "losglobal.h"
#include "ray.h"
+#include "strings.h"
#define RAY_METATABLE "dgn.ray"
diff --git a/crawl-ref/source/l_moninf.cc b/crawl-ref/source/l_moninf.cc
index 4f0ecb2648..f0599d505b 100644
--- a/crawl-ref/source/l_moninf.cc
+++ b/crawl-ref/source/l_moninf.cc
@@ -17,6 +17,7 @@
#include "mon-book.h"
#include "player.h"
#include "spl-util.h"
+#include "strings.h"
#include "transform.h"
#include <algorithm>
diff --git a/crawl-ref/source/l_mons.cc b/crawl-ref/source/l_mons.cc
index 1860b6c93e..e5bea82f68 100644
--- a/crawl-ref/source/l_mons.cc
+++ b/crawl-ref/source/l_mons.cc
@@ -14,6 +14,7 @@
#include "mon-util.h"
#include "mon-speak.h"
#include "monster.h"
+#include "strings.h"
#define WRAPPED_MONSTER(ls, name) \
MonsterWrap *___mw = clua_get_userdata< MonsterWrap >(ls, MONS_METATABLE); \
diff --git a/crawl-ref/source/l_view.cc b/crawl-ref/source/l_view.cc
index d399ca0752..49da0bd14e 100644
--- a/crawl-ref/source/l_view.cc
+++ b/crawl-ref/source/l_view.cc
@@ -9,15 +9,15 @@
#include "l_defs.h"
#include "cluautil.h"
+#include "cloud.h"
#include "coord.h"
#include "env.h"
-#include "libutil.h"
#include "mon-death.h"
#include "player.h"
#include "religion.h"
#include "terrain.h"
-#include "cloud.h"
#include "travel.h"
+#include "strings.h"
#include "view.h"
LUAFN(view_feature_at)
diff --git a/crawl-ref/source/l_you.cc b/crawl-ref/source/l_you.cc
index 980f4eb5bc..f287c5f087 100644
--- a/crawl-ref/source/l_you.cc
+++ b/crawl-ref/source/l_you.cc
@@ -34,7 +34,7 @@
#include "skills2.h"
#include "spl-transloc.h"
#include "spl-util.h"
-#include "stuff.h"
+#include "strings.h"
#include "transform.h"
#include "traps.h"
#include "travel.h"
diff --git a/crawl-ref/source/lang-fake.cc b/crawl-ref/source/lang-fake.cc
index 6b44d41d37..861a414c57 100644
--- a/crawl-ref/source/lang-fake.cc
+++ b/crawl-ref/source/lang-fake.cc
@@ -8,6 +8,7 @@
#include "libutil.h"
#include "options.h"
+#include "strings.h"
#include "unicode.h"
#define UPPER "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
diff --git a/crawl-ref/source/libutil.cc b/crawl-ref/source/libutil.cc
index 9896ccade3..e39a96d2e6 100644
--- a/crawl-ref/source/libutil.cc
+++ b/crawl-ref/source/libutil.cc
@@ -13,6 +13,7 @@
#include "files.h"
#include "message.h"
#include "state.h"
+#include "strings.h"
#include "unicode.h"
#include "version.h"
#include "viewgeom.h"
@@ -154,40 +155,6 @@ void play_sound(const char *file)
#endif
}
-string strip_filename_unsafe_chars(const string &s)
-{
- return replace_all_of(s, " .&`\"\'|;{}()[]<>*%$#@!~?", "");
-}
-
-string vmake_stringf(const char* s, va_list args)
-{
- char buf1[8000];
- va_list orig_args;
- va_copy(orig_args, args);
- size_t len = vsnprintf(buf1, sizeof buf1, s, orig_args);
- va_end(orig_args);
- if (len < sizeof buf1)
- return buf1;
-
- char *buf2 = (char*)malloc(len + 1);
- va_copy(orig_args, args);
- vsnprintf(buf2, len + 1, s, orig_args);
- va_end(orig_args);
- string ret(buf2);
- free(buf2);
-
- return ret;
-}
-
-string make_stringf(const char *s, ...)
-{
- va_list args;
- va_start(args, s);
- string ret = vmake_stringf(s, args);
- va_end(args);
- return ret;
-}
-
bool key_is_escape(int key)
{
switch (key)
@@ -199,87 +166,6 @@ bool key_is_escape(int key)
}
}
-string &uppercase(string &s)
-{
- for (unsigned i = 0, sz = s.size(); i < sz; ++i)
- s[i] = toupper(s[i]);
-
- return s;
-}
-
-string &lowercase(string &s)
-{
- s = lowercase_string(s);
- return s;
-}
-
-string lowercase_string(string s)
-{
- string res;
- ucs_t c;
- char buf[4];
- for (const char *tp = s.c_str(); int len = utf8towc(&c, tp); tp += len)
- res.append(buf, wctoutf8(buf, towlower(c)));
- return res;
-}
-
-// Warning: this (and uppercase_first()) relies on no libc (glibc, BSD libc,
-// MSVC crt) supporting letters that expand or contract, like German ß (-> SS)
-// upon capitalization / lowercasing. This is mostly a fault of the API --
-// there's no way to return two characters in one code point.
-// Also, all characters must have the same length in bytes before and after
-// lowercasing, all platforms currently have this property.
-//
-// A non-hacky version would be slower for no gain other than sane code; at
-// least unless you use some more powerful API.
-string lowercase_first(string s)
-{
- ucs_t c;
- if (!s.empty())
- {
- utf8towc(&c, &s[0]);
- wctoutf8(&s[0], towlower(c));
- }
- return s;
-}
-
-string uppercase_first(string s)
-{
- // Incorrect due to those pesky Dutch having "ij" as a single letter (wtf?).
- // Too bad, there's no standard function to handle that character, and I
- // don't care enough.
- ucs_t c;
- if (!s.empty())
- {
- utf8towc(&c, &s[0]);
- wctoutf8(&s[0], towupper(c));
- }
- return s;
-}
-
-int ends_with(const string &s, const char *suffixes[])
-{
- if (!suffixes)
- return 0;
-
- for (int i = 0; suffixes[i]; ++i)
- if (ends_with(s, suffixes[i]))
- return 1 + i;
-
- return 0;
-}
-
-bool strip_suffix(string &s, const string &suffix)
-{
- if (ends_with(s, suffix))
- {
- s.erase(s.length() - suffix.length(), suffix.length());
- trim_string(s);
- return true;
- }
- return false;
-}
-
// Returns true if s contains tag 'tag', and strips out tag from s.
bool strip_tag(string &s, const string &tag, bool skip_padding)
{
@@ -625,255 +511,6 @@ string number_in_words(unsigned num, int pow)
: ""));
}
-string replace_all(string s, const string &find, const string &repl)
-{
- ASSERT(!find.empty());
- string::size_type start = 0;
- string::size_type found;
-
- while ((found = s.find(find, start)) != string::npos)
- {
- s.replace(found, find.length(), repl);
- start = found + repl.length();
- }
-
- return s;
-}
-
-// Replaces all occurrences of any of the characters in tofind with the
-// replacement string.
-string replace_all_of(string s, const string &tofind, const string &replacement)
-{
- ASSERT(!tofind.empty());
- string::size_type start = 0;
- string::size_type found;
-
- while ((found = s.find_first_of(tofind, start)) != string::npos)
- {
- s.replace(found, 1, replacement);
- start = found + replacement.length();
- }
-
- return s;
-}
-
-// Capitalise phrases encased in @CAPS@ ... @NOCAPS@. If @NOCAPS@ is
-// missing, change the rest of the line to uppercase.
-string maybe_capitalise_substring(string s)
-{
- string::size_type start = 0;
- while ((start = s.find("@CAPS@", start)) != string::npos)
- {
- string::size_type cap_start = start + 6;
- string::size_type cap_end = string::npos;
- string::size_type end = s.find("@NOCAPS@", cap_start);
- string::size_type length = string::npos;
- string::size_type cap_length = string::npos;
- if (end != string::npos)
- {
- cap_end = end + 8;
- cap_length = end - cap_start;
- length = cap_end - start;
- }
- string substring = s.substr(cap_start, cap_length);
- trim_string(substring);
- s.replace(start, length, uppercase(substring));
- }
- return s;
-}
-
-// For each set of [phrase|term|word] contained in the string, replace the set with a random subphrase.
-// NOTE: Doesn't work for nested patterns!
-string maybe_pick_random_substring(string s)
-{
- string::size_type start = 0;
- while ((start = s.find("[", start)) != string::npos)
- {
- string::size_type end = s.find("]", start);
- if (end == string::npos)
- break;
-
- string substring = s.substr(start + 1, end - start - 1);
- vector<string> split = split_string("|", substring, false, true);
- int index = random2(split.size());
- s.replace(start, end + 1 - start, split[index]);
- }
- return s;
-}
-
-int count_occurrences(const string &text, const string &s)
-{
- ASSERT(!s.empty());
- int nfound = 0;
- string::size_type pos = 0;
-
- while ((pos = text.find(s, pos)) != string::npos)
- {
- ++nfound;
- pos += s.length();
- }
-
- return nfound;
-}
-
-string trimmed_string(string s)
-{
- trim_string(s);
- return s;
-}
-
-// also used with macros
-string &trim_string(string &str)
-{
- str.erase(0, str.find_first_not_of(" \t\n\r"));
- str.erase(str.find_last_not_of(" \t\n\r") + 1);
-
- return str;
-}
-
-string &trim_string_right(string &str)
-{
- str.erase(str.find_last_not_of(" \t\n\r") + 1);
- return str;
-}
-
-static void add_segment(vector<string> &segs, string s, bool trim,
- bool accept_empty)
-{
- if (trim && !s.empty())
- trim_string(s);
-
- if (accept_empty || !s.empty())
- segs.push_back(s);
-}
-
-vector<string> split_string(const string &sep, string s, bool trim_segments,
- bool accept_empty_segments, int nsplits)
-{
- vector<string> segments;
- int separator_length = sep.length();
-
- string::size_type pos;
- while (nsplits && (pos = s.find(sep)) != string::npos)
- {
- add_segment(segments, s.substr(0, pos),
- trim_segments, accept_empty_segments);
-
- s.erase(0, pos + separator_length);
-
- if (nsplits > 0)
- --nsplits;
- }
-
- if (!s.empty())
- add_segment(segments, s, trim_segments, accept_empty_segments);
-
- return segments;
-}
-
-static const string _get_indent(const string &s)
-{
- size_t prefix = 0;
- if (starts_with(s, "\"") // ASCII quotes
- || starts_with(s, "“") // English quotes
- || starts_with(s, "„") // Polish/German/... quotes
- || starts_with(s, "«") // French quotes
- || starts_with(s, "»") // Danish/... quotes
- || starts_with(s, "•")) // bulleted lists
- {
- prefix = 1;
- }
- else if (starts_with(s, "「")) // Chinese/Japanese quotes
- prefix = 2;
-
- size_t nspaces = s.find_first_not_of(' ', prefix);
- if (nspaces == string::npos)
- nspaces = 0;
- if (!(prefix += nspaces))
- return "";
- return string(prefix, ' ');
-}
-
-// The provided string is consumed!
-string wordwrap_line(string &s, int width, bool tags, bool indent)
-{
- const char *cp0 = s.c_str();
- const char *cp = cp0, *space = 0;
- ucs_t c;
-
- while (int clen = utf8towc(&c, cp))
- {
- int cw = wcwidth(c);
- if (c == ' ')
- space = cp;
- else if (c == '\n')
- {
- space = cp;
- break;
- }
- if (c == '<' && tags)
- {
- ASSERT(cw == 1);
- if (cp[1] == '<') // "<<" escape
- {
- // Note: this must be after a possible wrap, otherwise we could
- // split the escape between lines.
- cp++;
- }
- else
- {
- cw = 0;
- // Skip the whole tag.
- while (*cp != '>')
- {
- if (!*cp)
- {
- // Everything so far fitted, report error.
- string ret = s + ">";
- s = "<lightred>ERROR: string above had unterminated tag</lightred>";
- return ret;
- }
- cp++;
- }
- }
- }
-
- if (cw > width)
- break;
-
- if (cw >= 0)
- width -= cw;
- cp += clen;
- }
-
- if (!c)
- {
- // everything fits
- string ret = s;
- s.clear();
- return ret;
- }
-
- if (space)
- cp = space;
- const string ret = s.substr(0, cp - cp0);
-
- const string indentation = (indent && c != '\n') ? _get_indent(s) : "";
-
- // eat all trailing spaces and up to one newline
- while (*cp == ' ')
- cp++;
- if (*cp == '\n')
- cp++;
- s.erase(0, cp - cp0);
-
- // if we had to break a line, reinsert the indendation
- if (indent && c != '\n')
- s = indentation + s;
-
- return ret;
-}
-
/**
* Compare two strings, sorting integer numeric parts according to their value.
*
@@ -988,6 +625,8 @@ string colour_string(string in, int col)
return "<" + cols + ">" + in + "</" + cols + ">";
}
+
+
#ifndef USE_TILE_LOCAL
static coord_def _cgettopleft(GotoRegion region)
{
@@ -1070,29 +709,6 @@ void cscroll(int n, GotoRegion region)
mouse_mode mouse_control::ms_current_mode = MOUSE_MODE_NORMAL;
-#ifndef CRAWL_HAVE_STRLCPY
-size_t strlcpy(char *dst, const char *src, size_t n)
-{
- if (!n)
- return strlen(src);
-
- const char *s = src;
-
- while (--n > 0)
- if (!(*dst++ = *s++))
- break;
-
- if (!n)
- {
- *dst++ = 0;
- while (*s++)
- ;
- }
-
- return s - src - 1;
-}
-#endif
-
string unwrap_desc(string desc)
{
// Don't append a newline to an empty description.
diff --git a/crawl-ref/source/libutil.h b/crawl-ref/source/libutil.h
index 01a2c20ab6..ad16539099 100644
--- a/crawl-ref/source/libutil.h
+++ b/crawl-ref/source/libutil.h
@@ -12,25 +12,12 @@
#include <vector>
#include <map>
#include "config.h"
-
-extern const char *standard_plural_qualifiers[];
-
-// Applies a description type to a name, but does not pluralise! You
-// must pluralise the name if needed. The quantity is used to prefix the
-// name with a quantity if appropriate.
-string apply_description(description_level_type desc, const string &name,
- int quantity = 1, bool num_in_words = false);
-
-description_level_type description_type_by_name(const char *desc);
-
-string lowercase_string(string s);
-string &lowercase(string &s);
-string &uppercase(string &s);
-string uppercase_first(string);
-string lowercase_first(string);
+#include "strings.h" // :( for find_earliest_match
bool key_is_escape(int key);
+// numeric string functions
+
#define CASE_ESCAPE case ESCAPE: case CONTROL('G'): case -1:
// Unscales a fixed-point number, rounding up.
@@ -74,30 +61,29 @@ static inline ucs_t toalower(ucs_t c)
int numcmp(const char *a, const char *b, int limit = 0);
bool numcmpstr(string a, string b);
-#ifdef CRAWL_HAVE_STRLCPY
-#include <cstring>
-#else
-size_t strlcpy(char *dst, const char *src, size_t n);
-#endif
-
-int strwidth(const char *s);
-int strwidth(const string &s);
-string chop_string(const char *s, int width, bool spaces = true);
-string chop_string(const string &s, int width, bool spaces = true);
-string wordwrap_line(string &s, int cols, bool tags = false,
- bool indent = false);
-
bool version_is_stable(const char *ver);
// String "tags"
#define TAG_UNFOUND -20404
bool strip_tag(string &s, const string &tag, bool nopad = false);
-bool strip_suffix(string &s, const string &suffix);
int strip_number_tag(string &s, const string &tagprefix);
vector<string> strip_multiple_tag_prefix(string &s, const string &tagprefix);
string strip_tag_prefix(string &s, const string &tagprefix);
bool parse_int(const char *s, int &i);
+string number_in_words(unsigned number, int pow = 0);
+
+// String 'descriptions'
+
+extern const char *standard_plural_qualifiers[];
+
+// Applies a description type to a name, but does not pluralise! You
+// must pluralise the name if needed. The quantity is used to prefix the
+// name with a quantity if appropriate.
+string apply_description(description_level_type desc, const string &name,
+ int quantity = 1, bool num_in_words = false);
+
+description_level_type description_type_by_name(const char *desc);
string article_a(const string &name, bool lowercase = true);
string pluralise(const string &name,
const char *stock_plural_quals[] = standard_plural_qualifiers,
@@ -105,77 +91,12 @@ string pluralise(const string &name,
string apostrophise(const string &name);
string apostrophise_fixup(const string &msg);
-string number_in_words(unsigned number, int pow = 0);
-bool shell_safe(const char *file);
-
-/**
- * Returns 1 + the index of the first suffix that matches the given string,
- * 0 if no suffixes match.
- */
-int ends_with(const string &s, const char *suffixes[]);
-
-string strip_filename_unsafe_chars(const string &s);
-
-string vmake_stringf(const char *format, va_list args);
-string make_stringf(PRINTF(0, ));
-
-string replace_all(string s, const string &tofind, const string &replacement);
-string replace_all_of(string s, const string &tofind, const string &replacement);
-
-string maybe_capitalise_substring(string s);
-string maybe_pick_random_substring(string s);
-
-int count_occurrences(const string &text, const string &searchfor);
+bool shell_safe(const char *file);
void play_sound(const char *file);
-string &trim_string(string &str);
-string &trim_string_right(string &str);
-string trimmed_string(string s);
-
-static inline bool starts_with(const string &s, const string &prefix)
-{
- return s.rfind(prefix, 0) != string::npos;
-}
-
-static inline bool ends_with(const string &s, const string &suffix)
-{
- if (s.length() < suffix.length())
- return false;
- return s.find(suffix, s.length() - suffix.length()) != string::npos;
-}
-
-// Splits string 's' on the separator 'sep'. If trim == true, trims each
-// segment. If accept_empties == true, accepts empty segments. If nsplits >= 0,
-// splits on the first nsplits occurrences of the separator, and stores the
-// remainder of the string as the last segment; negative values of nsplits
-// split on all occurrences of the separator.
-vector<string> split_string(const string &sep, string s, bool trim = true,
- bool accept_empties = false, int nsplits = -1);
-
-template <typename Z>
-string comma_separated_line(Z start, Z end, const string &andc = " and ",
- const string &comma = ", ")
-{
- string text;
- for (Z i = start; i != end; ++i)
- {
- if (i != start)
- {
- Z tmp = i;
- if (++tmp != end)
- text += comma;
- else
- text += andc;
- }
-
- text += *i;
- }
- return text;
-}
-
string unwrap_desc(string desc);
template<class T> bool _always_true(T) { return true; }
diff --git a/crawl-ref/source/macro.cc b/crawl-ref/source/macro.cc
index ad9eea2c92..5c6aa605d1 100644
--- a/crawl-ref/source/macro.cc
+++ b/crawl-ref/source/macro.cc
@@ -41,7 +41,7 @@
#include "output.h"
#include "message.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "syscalls.h"
#include "unicode.h"
#include "version.h"
diff --git a/crawl-ref/source/main.cc b/crawl-ref/source/main.cc
index 4339cfb48f..f14c55bb60 100644
--- a/crawl-ref/source/main.cc
+++ b/crawl-ref/source/main.cc
@@ -130,7 +130,7 @@
#include "startup.h"
#include "stash.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "tags.h"
#include "target.h"
#include "terrain.h"
diff --git a/crawl-ref/source/makeitem.cc b/crawl-ref/source/makeitem.cc
index 99a932985c..f5e5e31671 100644
--- a/crawl-ref/source/makeitem.cc
+++ b/crawl-ref/source/makeitem.cc
@@ -29,7 +29,8 @@
#include "random.h"
#include "spl-book.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
+#include "stepdown.h"
#include "travel.h"
static armour_type _get_random_armour_type(int item_level);
diff --git a/crawl-ref/source/mapdef.cc b/crawl-ref/source/mapdef.cc
index 47d7416c03..bc2af73b26 100644
--- a/crawl-ref/source/mapdef.cc
+++ b/crawl-ref/source/mapdef.cc
@@ -45,6 +45,7 @@
#include "shopping.h"
#include "spl-util.h"
#include "spl-book.h"
+#include "strings.h"
#include "env.h"
#include "tags.h"
#include "terrain.h"
diff --git a/crawl-ref/source/mapmark.cc b/crawl-ref/source/mapmark.cc
index 4d6a3ffac2..49806c50e8 100644
--- a/crawl-ref/source/mapmark.cc
+++ b/crawl-ref/source/mapmark.cc
@@ -18,6 +18,7 @@
#include "env.h"
#include "libutil.h"
#include "l_libs.h"
+#include "strings.h"
#include "tags.h"
#include "terrain.h"
#include "unwind.h"
diff --git a/crawl-ref/source/maps.cc b/crawl-ref/source/maps.cc
index 8031268460..ed266dade0 100644
--- a/crawl-ref/source/maps.cc
+++ b/crawl-ref/source/maps.cc
@@ -26,7 +26,6 @@
#include "env.h"
#include "enum.h"
#include "files.h"
-#include "libutil.h"
#include "message.h"
#include "mapdef.h"
#include "mapmark.h"
@@ -35,6 +34,7 @@
#include "coord.h"
#include "random.h"
#include "state.h"
+#include "strings.h"
#include "syscalls.h"
#include "tags.h"
#include "terrain.h"
diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc
index 08733a3b0e..04653bda79 100644
--- a/crawl-ref/source/melee_attack.cc
+++ b/crawl-ref/source/melee_attack.cc
@@ -65,7 +65,7 @@
#include "spl-summoning.h"
#include "spl-util.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "target.h"
#include "transform.h"
#include "traps.h"
diff --git a/crawl-ref/source/menu.cc b/crawl-ref/source/menu.cc
index 29925aa5dd..baedba384a 100644
--- a/crawl-ref/source/menu.cc
+++ b/crawl-ref/source/menu.cc
@@ -23,6 +23,8 @@
#include "options.h"
#include "player.h"
#include "state.h"
+#include "strings.h"
+#include "unicode.h"
#ifdef USE_TILE_LOCAL
#include "tilebuf.h"
diff --git a/crawl-ref/source/message.cc b/crawl-ref/source/message.cc
index 01ad5bad05..64c6001404 100644
--- a/crawl-ref/source/message.cc
+++ b/crawl-ref/source/message.cc
@@ -7,10 +7,12 @@
#include "message.h"
+#include "areas.h"
#include "cio.h"
#include "colour.h"
#include "delay.h"
#include "format.h"
+#include "hints.h"
#include "initfile.h"
#include "libutil.h"
#include "menu.h"
@@ -21,13 +23,12 @@
#include "religion.h"
#include "stash.h"
#include "state.h"
-#include "areas.h"
#include "tags.h"
#include "travel.h"
-#include "hints.h"
+#include "shout.h"
+#include "strings.h"
#include "unwind.h"
#include "view.h"
-#include "shout.h"
#include "viewgeom.h"
#include <sstream>
diff --git a/crawl-ref/source/misc.cc b/crawl-ref/source/misc.cc
index 50cfc51a0c..ee14468b0f 100644
--- a/crawl-ref/source/misc.cc
+++ b/crawl-ref/source/misc.cc
@@ -72,7 +72,7 @@
#include "skills2.h"
#include "spl-clouds.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "target.h"
#include "terrain.h"
#include "tileview.h"
diff --git a/crawl-ref/source/mon-abil.cc b/crawl-ref/source/mon-abil.cc
index 7bbd761e76..cf2c8d69c3 100644
--- a/crawl-ref/source/mon-abil.cc
+++ b/crawl-ref/source/mon-abil.cc
@@ -54,7 +54,7 @@
#include "spl-miscast.h"
#include "spl-util.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "env.h"
#include "areas.h"
#include "view.h"
diff --git a/crawl-ref/source/mon-act.cc b/crawl-ref/source/mon-act.cc
index 6b5101a22e..28299d1df2 100644
--- a/crawl-ref/source/mon-act.cc
+++ b/crawl-ref/source/mon-act.cc
@@ -59,7 +59,7 @@
#include "spl-summoning.h"
#include "spl-util.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "target.h"
#include "teleport.h"
#include "terrain.h"
diff --git a/crawl-ref/source/mon-behv.cc b/crawl-ref/source/mon-behv.cc
index d4228d9117..8400abe7e2 100644
--- a/crawl-ref/source/mon-behv.cc
+++ b/crawl-ref/source/mon-behv.cc
@@ -34,6 +34,7 @@
#include "religion.h"
#include "spl-summoning.h"
#include "state.h"
+#include "strings.h"
#include "terrain.h"
#include "traps.h"
#include "hints.h"
diff --git a/crawl-ref/source/mon-cast.cc b/crawl-ref/source/mon-cast.cc
index a9ae625177..12615c9313 100644
--- a/crawl-ref/source/mon-cast.cc
+++ b/crawl-ref/source/mon-cast.cc
@@ -9,6 +9,7 @@
#include <math.h>
#include "act-iter.h"
+#include "areas.h"
#include "beam.h"
#include "branch.h"
#include "cloud.h"
@@ -51,8 +52,8 @@
#include "spl-monench.h"
#include "spl-summoning.h"
#include "state.h"
-#include "stuff.h"
-#include "areas.h"
+#include "stepdown.h"
+#include "strings.h"
#include "target.h"
#include "teleport.h"
#include "traps.h"
diff --git a/crawl-ref/source/mon-clone.cc b/crawl-ref/source/mon-clone.cc
index 47743e9dcd..29f75ecfc1 100644
--- a/crawl-ref/source/mon-clone.cc
+++ b/crawl-ref/source/mon-clone.cc
@@ -24,6 +24,7 @@
#include "player.h"
#include "random.h"
#include "state.h"
+#include "strings.h"
#include "terrain.h"
#include "transform.h"
#include "unwind.h"
diff --git a/crawl-ref/source/mon-death.cc b/crawl-ref/source/mon-death.cc
index fd8a86cc8f..c31c2659fa 100644
--- a/crawl-ref/source/mon-death.cc
+++ b/crawl-ref/source/mon-death.cc
@@ -62,7 +62,8 @@
#include "spl-summoning.h"
#include "spl-util.h"
#include "state.h"
-#include "stuff.h"
+#include "stepdown.h"
+#include "strings.h"
#include "target.h"
#include "terrain.h"
#include "transform.h"
diff --git a/crawl-ref/source/mon-ench.cc b/crawl-ref/source/mon-ench.cc
index 6203d38a5f..0c64558f58 100644
--- a/crawl-ref/source/mon-ench.cc
+++ b/crawl-ref/source/mon-ench.cc
@@ -35,7 +35,8 @@
#include "spl-damage.h"
#include "spl-summoning.h"
#include "state.h"
-#include "stuff.h"
+#include "stepdown.h"
+#include "strings.h"
#include "teleport.h"
#include "terrain.h"
#include "traps.h"
diff --git a/crawl-ref/source/mon-info.cc b/crawl-ref/source/mon-info.cc
index a37001ff8e..96474c72e8 100644
--- a/crawl-ref/source/mon-info.cc
+++ b/crawl-ref/source/mon-info.cc
@@ -32,6 +32,7 @@
#include "skills2.h"
#include "spl-summoning.h"
#include "state.h"
+#include "strings.h"
#include "terrain.h"
#include "traps.h"
diff --git a/crawl-ref/source/mon-pick.cc b/crawl-ref/source/mon-pick.cc
index aeee5c20f9..f645be6100 100644
--- a/crawl-ref/source/mon-pick.cc
+++ b/crawl-ref/source/mon-pick.cc
@@ -16,6 +16,7 @@
#include "mon-place.h"
#include "mon-util.h"
#include "place.h"
+#include "strings.h"
#include "mon-pick-data.h"
diff --git a/crawl-ref/source/mon-poly.cc b/crawl-ref/source/mon-poly.cc
index 11c2e05744..89c0e9a622 100644
--- a/crawl-ref/source/mon-poly.cc
+++ b/crawl-ref/source/mon-poly.cc
@@ -30,6 +30,7 @@
#include "player.h"
#include "religion.h"
#include "state.h"
+#include "strings.h"
#include "terrain.h"
#include "traps.h"
#include "xom.h"
diff --git a/crawl-ref/source/mon-project.cc b/crawl-ref/source/mon-project.cc
index ac8c91717a..d55eb680ab 100644
--- a/crawl-ref/source/mon-project.cc
+++ b/crawl-ref/source/mon-project.cc
@@ -25,7 +25,7 @@
#include "mon-util.h"
#include "ouch.h"
#include "shout.h"
-#include "stuff.h"
+#include "stepdown.h"
#include "terrain.h"
#include "viewchar.h"
diff --git a/crawl-ref/source/mon-speak.cc b/crawl-ref/source/mon-speak.cc
index 02edbb762b..f73039f45a 100644
--- a/crawl-ref/source/mon-speak.cc
+++ b/crawl-ref/source/mon-speak.cc
@@ -14,6 +14,7 @@
#include "externs.h"
+#include "areas.h"
#include "beam.h"
#include "branch.h"
#include "cluautil.h"
@@ -29,8 +30,7 @@
#include "religion.h"
#include "skills2.h"
#include "state.h"
-#include "stuff.h"
-#include "areas.h"
+#include "strings.h"
#include "view.h"
// Try the exact key lookup along with the entire prefix list.
diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc
index 2a567cefa3..2ad767c33d 100644
--- a/crawl-ref/source/mon-util.cc
+++ b/crawl-ref/source/mon-util.cc
@@ -50,7 +50,7 @@
#include "spl-util.h"
#include "spl-summoning.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "terrain.h"
#include "tilepick.h"
#include "tileview.h"
diff --git a/crawl-ref/source/monster.cc b/crawl-ref/source/monster.cc
index 93445651d3..4a8365c6ec 100644
--- a/crawl-ref/source/monster.cc
+++ b/crawl-ref/source/monster.cc
@@ -51,11 +51,13 @@
#include "religion.h"
#include "rot.h"
#include "shopping.h"
+#include "shout.h"
#include "spl-damage.h"
#include "spl-monench.h"
#include "spl-util.h"
#include "spl-summoning.h"
#include "state.h"
+#include "strings.h"
#include "teleport.h"
#include "terrain.h"
#ifdef USE_TILE
@@ -63,7 +65,6 @@
#endif
#include "traps.h"
#include "view.h"
-#include "shout.h"
#include "xom.h"
#include <algorithm>
diff --git a/crawl-ref/source/mutation.cc b/crawl-ref/source/mutation.cc
index 2cfef92a0e..62c46cdd92 100644
--- a/crawl-ref/source/mutation.cc
+++ b/crawl-ref/source/mutation.cc
@@ -48,8 +48,9 @@
#include "random.h"
#include "skills2.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "transform.h"
+#include "unicode.h"
#include "viewchar.h"
#include "xom.h"
diff --git a/crawl-ref/source/newgame.cc b/crawl-ref/source/newgame.cc
index 133c2233dd..d63fdb0547 100644
--- a/crawl-ref/source/newgame.cc
+++ b/crawl-ref/source/newgame.cc
@@ -31,7 +31,7 @@
#include "random.h"
#include "species.h"
#include "state.h"
-#include "stuff.h"
+
#ifdef USE_TILE_LOCAL
#include "tilereg-crt.h"
diff --git a/crawl-ref/source/ng-init.cc b/crawl-ref/source/ng-init.cc
index 5da7edb42e..81a6e2eb32 100644
--- a/crawl-ref/source/ng-init.cc
+++ b/crawl-ref/source/ng-init.cc
@@ -24,7 +24,9 @@
#include "spl-util.h"
#include "state.h"
#include "store.h"
+#include "strings.h"
#include "version.h"
+#include "unicode.h"
#ifdef DEBUG_DIAGNOSTICS
#define DEBUG_TEMPLES
diff --git a/crawl-ref/source/ng-input.cc b/crawl-ref/source/ng-input.cc
index 4cf567b6a6..43815aafb2 100644
--- a/crawl-ref/source/ng-input.cc
+++ b/crawl-ref/source/ng-input.cc
@@ -9,6 +9,7 @@
#include "format.h"
#include "libutil.h"
#include "options.h"
+#include "strings.h"
#include "unicode.h"
#include "version.h"
diff --git a/crawl-ref/source/ng-setup.cc b/crawl-ref/source/ng-setup.cc
index 85c975349b..652a6e0bc6 100644
--- a/crawl-ref/source/ng-setup.cc
+++ b/crawl-ref/source/ng-setup.cc
@@ -30,7 +30,7 @@
#include "spl-book.h"
#include "spl-util.h"
#include "state.h"
-#include "stuff.h"
+
#include "tutorial.h"
#define MIN_START_STAT 3
diff --git a/crawl-ref/source/notes.cc b/crawl-ref/source/notes.cc
index 0d9350e053..0c0a8d9710 100644
--- a/crawl-ref/source/notes.cc
+++ b/crawl-ref/source/notes.cc
@@ -24,7 +24,9 @@
#include "skills2.h"
#include "spl-util.h"
#include "state.h"
+#include "strings.h"
#include "tags.h"
+#include "unicode.h"
#define NOTES_VERSION_NUMBER 1002
diff --git a/crawl-ref/source/ouch.cc b/crawl-ref/source/ouch.cc
index f5b387344d..465623a0f5 100644
--- a/crawl-ref/source/ouch.cc
+++ b/crawl-ref/source/ouch.cc
@@ -68,7 +68,7 @@
#include "spl-selfench.h"
#include "spl-other.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "transform.h"
#include "tutorial.h"
#include "view.h"
diff --git a/crawl-ref/source/output.cc b/crawl-ref/source/output.cc
index e7011eff87..b32c272228 100644
--- a/crawl-ref/source/output.cc
+++ b/crawl-ref/source/output.cc
@@ -49,7 +49,7 @@
#include "skills2.h"
#include "state.h"
#include "status.h"
-#include "stuff.h"
+#include "strings.h"
#include "throw.h"
#include "transform.h"
#include "travel.h"
diff --git a/crawl-ref/source/place.cc b/crawl-ref/source/place.cc
index 844f7063dd..1e90bbe721 100644
--- a/crawl-ref/source/place.cc
+++ b/crawl-ref/source/place.cc
@@ -8,9 +8,9 @@
#include "externs.h"
#include "branch.h"
-#include "libutil.h"
#include "place.h"
#include "player.h"
+#include "strings.h"
#include "travel.h"
string short_place_name(level_id id)
diff --git a/crawl-ref/source/player-reacts.cc b/crawl-ref/source/player-reacts.cc
index eb31fd1f07..010d5bec35 100644
--- a/crawl-ref/source/player-reacts.cc
+++ b/crawl-ref/source/player-reacts.cc
@@ -116,7 +116,7 @@
#include "startup.h"
#include "stash.h"
#include "state.h"
-#include "stuff.h"
+
#include "tags.h"
#include "target.h"
#include "terrain.h"
diff --git a/crawl-ref/source/player-stats.cc b/crawl-ref/source/player-stats.cc
index c70d5d264a..d3ad5f01ed 100644
--- a/crawl-ref/source/player-stats.cc
+++ b/crawl-ref/source/player-stats.cc
@@ -18,6 +18,7 @@
#include "player.h"
#include "religion.h"
#include "state.h"
+#include "strings.h"
#include "transform.h"
#include "hints.h"
diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc
index 38493491c1..939e7b4950 100644
--- a/crawl-ref/source/player.cc
+++ b/crawl-ref/source/player.cc
@@ -84,7 +84,8 @@
#include "stash.h"
#include "state.h"
#include "status.h"
-#include "stuff.h"
+#include "stepdown.h"
+#include "strings.h"
#include "terrain.h"
#include "throw.h"
#ifdef USE_TILE
diff --git a/crawl-ref/source/potion.cc b/crawl-ref/source/potion.cc
index 17918891c8..d13ab4ba30 100644
--- a/crawl-ref/source/potion.cc
+++ b/crawl-ref/source/potion.cc
@@ -31,6 +31,7 @@
#include "skill_menu.h"
#include "spl-goditem.h"
#include "spl-miscast.h"
+#include "strings.h"
#include "terrain.h"
#include "transform.h"
#include "xom.h"
diff --git a/crawl-ref/source/process_desc.h b/crawl-ref/source/process_desc.h
index f39e96e440..9343eb32da 100644
--- a/crawl-ref/source/process_desc.h
+++ b/crawl-ref/source/process_desc.h
@@ -7,7 +7,7 @@
#define DESCRIBE_TEMPLATES_H
#include "describe.h"
-#include "libutil.h"
+#include "strings.h"
#include "lang-fake.h"
template<class T> void process_description(T &proc, const describe_info &inf);
diff --git a/crawl-ref/source/prompt.cc b/crawl-ref/source/prompt.cc
index 23c6e990a8..07b03e2ef0 100644
--- a/crawl-ref/source/prompt.cc
+++ b/crawl-ref/source/prompt.cc
@@ -13,6 +13,7 @@
#include "message.h"
#include "options.h"
#include "state.h"
+#include "strings.h"
#include "viewchar.h"
// Like yesno, but requires a full typed answer.
diff --git a/crawl-ref/source/quiver.cc b/crawl-ref/source/quiver.cc
index ea5309c442..484a4f2ce5 100644
--- a/crawl-ref/source/quiver.cc
+++ b/crawl-ref/source/quiver.cc
@@ -15,11 +15,10 @@
#include "invent.h"
#include "itemprop.h"
#include "items.h"
-#include "libutil.h"
#include "options.h"
#include "player.h"
#include "prompt.h"
-#include "stuff.h"
+#include "strings.h"
#include "tags.h"
#include "throw.h"
diff --git a/crawl-ref/source/ranged_attack.cc b/crawl-ref/source/ranged_attack.cc
index 7d40cad87d..4ba0d907a4 100644
--- a/crawl-ref/source/ranged_attack.cc
+++ b/crawl-ref/source/ranged_attack.cc
@@ -22,6 +22,7 @@
#include "monster.h"
#include "player.h"
#include "random.h"
+#include "strings.h"
#include "teleport.h"
#include "traps.h"
diff --git a/crawl-ref/source/religion.cc b/crawl-ref/source/religion.cc
index 3186d02078..7bad2fc919 100644
--- a/crawl-ref/source/religion.cc
+++ b/crawl-ref/source/religion.cc
@@ -75,7 +75,7 @@
#include "spl-selfench.h"
#include "sprint.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "terrain.h"
#include "transform.h"
#include "hints.h"
diff --git a/crawl-ref/source/rot.cc b/crawl-ref/source/rot.cc
index 0950e31368..6151142321 100644
--- a/crawl-ref/source/rot.cc
+++ b/crawl-ref/source/rot.cc
@@ -15,7 +15,6 @@
#include "hints.h"
#include "itemprop.h"
#include "items.h"
-#include "libutil.h"
#include "makeitem.h"
#include "misc.h"
#include "mon-death.h"
@@ -24,7 +23,8 @@
#include "prompt.h"
#include "religion.h"
#include "shopping.h"
-#include "stuff.h"
+#include "strings.h"
+
#define TIMER_KEY "timer"
diff --git a/crawl-ref/source/shopping.cc b/crawl-ref/source/shopping.cc
index 8d8cc2e7f5..b6a75d9a11 100644
--- a/crawl-ref/source/shopping.cc
+++ b/crawl-ref/source/shopping.cc
@@ -36,7 +36,8 @@
#include "spl-book.h"
#include "stash.h"
#include "state.h"
-#include "stuff.h"
+#include "stepdown.h"
+#include "strings.h"
#include "travel.h"
#include "unwind.h"
#include "env.h"
diff --git a/crawl-ref/source/shout.cc b/crawl-ref/source/shout.cc
index 293dcf770d..19349b47b7 100644
--- a/crawl-ref/source/shout.cc
+++ b/crawl-ref/source/shout.cc
@@ -10,6 +10,7 @@
#include "act-iter.h"
#include "art-enum.h"
#include "artefact.h"
+#include "areas.h"
#include "branch.h"
#include "cluautil.h"
#include "coord.h"
@@ -18,6 +19,7 @@
#include "env.h"
#include "exercise.h"
#include "ghost.h"
+#include "hints.h"
#include "jobs.h"
#include "libutil.h"
#include "los.h"
@@ -36,9 +38,8 @@
#include "religion.h"
#include "skills.h"
#include "state.h"
+#include "strings.h"
#include "terrain.h"
-#include "areas.h"
-#include "hints.h"
#include "view.h"
#include <sstream>
diff --git a/crawl-ref/source/showsymb.cc b/crawl-ref/source/showsymb.cc
index 67bc95f863..cb1503b0aa 100644
--- a/crawl-ref/source/showsymb.cc
+++ b/crawl-ref/source/showsymb.cc
@@ -12,7 +12,6 @@
#include "colour.h"
#include "env.h"
#include "itemname.h"
-#include "libutil.h"
#include "map_knowledge.h"
#include "mon-util.h"
#include "monster.h"
@@ -21,6 +20,7 @@
#include "show.h"
#include "stash.h"
#include "state.h"
+#include "strings.h"
#include "terrain.h"
#include "travel.h"
#include "viewchar.h"
diff --git a/crawl-ref/source/skill_menu.cc b/crawl-ref/source/skill_menu.cc
index 37d898c141..53875166ba 100644
--- a/crawl-ref/source/skill_menu.cc
+++ b/crawl-ref/source/skill_menu.cc
@@ -14,7 +14,6 @@
#include "evoke.h"
#include "fontwrapper-ft.h"
#include "hints.h"
-#include "libutil.h"
#include "options.h"
#include "output.h"
#include "player.h"
@@ -22,7 +21,8 @@
#include "skills.h"
#include "skills2.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
+
#ifdef USE_TILE
#include "tilepick.h"
#include "tilereg-crt.h"
diff --git a/crawl-ref/source/skills.cc b/crawl-ref/source/skills.cc
index 775de769fb..a33e14cd1d 100644
--- a/crawl-ref/source/skills.cc
+++ b/crawl-ref/source/skills.cc
@@ -32,7 +32,7 @@
#include "spl-cast.h"
#include "sprint.h"
#include "state.h"
-#include "stuff.h"
+
// MAX_COST_LIMIT is the maximum XP amount it will cost to raise a skill
// by 10 skill points (ie one standard practice).
diff --git a/crawl-ref/source/skills2.cc b/crawl-ref/source/skills2.cc
index f5b804eb40..b259471262 100644
--- a/crawl-ref/source/skills2.cc
+++ b/crawl-ref/source/skills2.cc
@@ -21,12 +21,12 @@
#include "evoke.h"
#include "externs.h"
#include "godabil.h"
-#include "libutil.h"
#include "player.h"
#include "religion.h"
#include "species.h"
#include "skills.h"
#include "skill_menu.h"
+#include "strings.h"
#include "unwind.h"
typedef string (*string_fn)();
diff --git a/crawl-ref/source/spl-book.cc b/crawl-ref/source/spl-book.cc
index 082b0626ca..80ae2d0db0 100644
--- a/crawl-ref/source/spl-book.cc
+++ b/crawl-ref/source/spl-book.cc
@@ -44,12 +44,13 @@
#include "spl-cast.h"
#include "spl-util.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "target.h"
#ifdef USE_TILE
#include "tilepick.h"
#endif
#include "transform.h"
+#include "unicode.h"
#define SPELL_LIST_KEY "spell_list"
diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc
index 16582f8d3b..da343613d4 100644
--- a/crawl-ref/source/spl-cast.cc
+++ b/crawl-ref/source/spl-cast.cc
@@ -60,13 +60,15 @@
#include "spl-wpnench.h"
#include "spl-zap.h"
#include "state.h"
-#include "stuff.h"
+#include "stepdown.h"
+#include "strings.h"
#include "target.h"
#include "terrain.h"
#ifdef USE_TILE
#include "tilepick.h"
#endif
#include "transform.h"
+#include "unicode.h"
#include "view.h"
static int _spell_enhancement(unsigned int typeflags);
diff --git a/crawl-ref/source/spl-damage.cc b/crawl-ref/source/spl-damage.cc
index ce0336e850..590757ea90 100644
--- a/crawl-ref/source/spl-damage.cc
+++ b/crawl-ref/source/spl-damage.cc
@@ -44,12 +44,14 @@
#include "spl-summoning.h"
#include "spl-util.h"
#include "state.h"
-#include "stuff.h"
+#include "stepdown.h"
+#include "strings.h"
#include "target.h"
#include "teleport.h"
#include "terrain.h"
#include "transform.h"
#include "traps.h"
+#include "unicode.h"
#include "view.h"
#include "viewchar.h"
diff --git a/crawl-ref/source/spl-goditem.cc b/crawl-ref/source/spl-goditem.cc
index d3478a9ff9..7abb387cf2 100644
--- a/crawl-ref/source/spl-goditem.cc
+++ b/crawl-ref/source/spl-goditem.cc
@@ -36,7 +36,7 @@
#include "religion.h"
#include "spl-util.h"
#include "state.h"
-#include "stuff.h"
+
#include "terrain.h"
#include "tiledef-dngn.h"
#include "tilepick.h"
diff --git a/crawl-ref/source/spl-miscast.cc b/crawl-ref/source/spl-miscast.cc
index b130ea4429..95557d8839 100644
--- a/crawl-ref/source/spl-miscast.cc
+++ b/crawl-ref/source/spl-miscast.cc
@@ -36,7 +36,7 @@
#include "spl-clouds.h"
#include "spl-summoning.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "areas.h"
#include "terrain.h"
#include "transform.h"
diff --git a/crawl-ref/source/spl-monench.cc b/crawl-ref/source/spl-monench.cc
index e11219c641..ae1f163cfe 100644
--- a/crawl-ref/source/spl-monench.cc
+++ b/crawl-ref/source/spl-monench.cc
@@ -14,7 +14,7 @@
#include "message.h"
#include "random.h"
#include "spl-util.h"
-#include "stuff.h"
+
#include "terrain.h"
int englaciate(coord_def where, int pow, int, actor *agent)
diff --git a/crawl-ref/source/spl-other.cc b/crawl-ref/source/spl-other.cc
index 93e18f8db9..3fb1070d7e 100644
--- a/crawl-ref/source/spl-other.cc
+++ b/crawl-ref/source/spl-other.cc
@@ -32,7 +32,7 @@
#include "religion.h"
#include "rot.h"
#include "spl-util.h"
-#include "stuff.h"
+
#include "terrain.h"
#include "transform.h"
diff --git a/crawl-ref/source/spl-selfench.cc b/crawl-ref/source/spl-selfench.cc
index d6f438a6a2..806ab97403 100644
--- a/crawl-ref/source/spl-selfench.cc
+++ b/crawl-ref/source/spl-selfench.cc
@@ -23,7 +23,7 @@
#include "spl-cast.h"
#include "spl-transloc.h"
#include "spl-util.h"
-#include "stuff.h"
+
#include "transform.h"
#include "view.h"
diff --git a/crawl-ref/source/spl-summoning.cc b/crawl-ref/source/spl-summoning.cc
index 78a2dd8f34..dd246d1a1d 100644
--- a/crawl-ref/source/spl-summoning.cc
+++ b/crawl-ref/source/spl-summoning.cc
@@ -53,7 +53,8 @@
#include "spl-wpnench.h"
#include "spl-zap.h"
#include "state.h"
-#include "stuff.h"
+#include "stepdown.h"
+#include "strings.h"
#include "teleport.h"
#include "terrain.h"
#include "unwind.h"
diff --git a/crawl-ref/source/spl-transloc.cc b/crawl-ref/source/spl-transloc.cc
index 4beb9735cb..99d117356d 100644
--- a/crawl-ref/source/spl-transloc.cc
+++ b/crawl-ref/source/spl-transloc.cc
@@ -40,7 +40,7 @@
#include "spl-util.h"
#include "stash.h"
#include "state.h"
-#include "stuff.h"
+
#include "teleport.h"
#include "terrain.h"
#include "throw.h"
diff --git a/crawl-ref/source/spl-util.cc b/crawl-ref/source/spl-util.cc
index 7b775df6f8..1f2d801c2e 100644
--- a/crawl-ref/source/spl-util.cc
+++ b/crawl-ref/source/spl-util.cc
@@ -23,7 +23,6 @@
#include "coordit.h"
#include "directn.h"
#include "godabil.h"
-#include "stuff.h"
#include "env.h"
#include "items.h"
#include "libutil.h"
@@ -40,6 +39,7 @@
#include "spl-book.h"
#include "spl-damage.h"
#include "spl-zap.h"
+#include "strings.h"
#include "target.h"
#include "terrain.h"
#include "transform.h"
diff --git a/crawl-ref/source/spl-zap.cc b/crawl-ref/source/spl-zap.cc
index 8e68e2855c..2b8a5aacfd 100644
--- a/crawl-ref/source/spl-zap.cc
+++ b/crawl-ref/source/spl-zap.cc
@@ -3,7 +3,7 @@
#include "spl-zap.h"
#include "beam.h"
-#include "stuff.h"
+#include "stepdown.h"
zap_type spell_to_zap(spell_type spell)
{
diff --git a/crawl-ref/source/stairs.cc b/crawl-ref/source/stairs.cc
index 653c69e6a3..0428290852 100644
--- a/crawl-ref/source/stairs.cc
+++ b/crawl-ref/source/stairs.cc
@@ -41,6 +41,7 @@
#include "spl-transloc.h"
#include "stash.h"
#include "state.h"
+#include "strings.h"
#include "terrain.h"
#ifdef USE_TILE_LOCAL
#include "tilepick.h"
diff --git a/crawl-ref/source/startup.cc b/crawl-ref/source/startup.cc
index 375a971ad1..944b57f527 100644
--- a/crawl-ref/source/startup.cc
+++ b/crawl-ref/source/startup.cc
@@ -54,7 +54,7 @@
#include "startup.h"
#include "state.h"
#include "status.h"
-#include "stuff.h"
+#include "strings.h"
#include "terrain.h"
#include "tileview.h"
#include "view.h"
diff --git a/crawl-ref/source/stash.cc b/crawl-ref/source/stash.cc
index 8c531c90b7..de0d05769b 100644
--- a/crawl-ref/source/stash.cc
+++ b/crawl-ref/source/stash.cc
@@ -34,7 +34,7 @@
#include "spl-book.h"
#include "stash.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "syscalls.h"
#include "env.h"
#include "tags.h"
diff --git a/crawl-ref/source/status.cc b/crawl-ref/source/status.cc
index d9fd9e9ed8..df16efb551 100644
--- a/crawl-ref/source/status.cc
+++ b/crawl-ref/source/status.cc
@@ -16,9 +16,10 @@
#include "player-stats.h"
#include "religion.h"
#include "skills2.h"
+#include "spl-transloc.h"
+#include "strings.h"
#include "terrain.h"
#include "transform.h"
-#include "spl-transloc.h"
#include "traps.h"
#include "duration-data.h"
diff --git a/crawl-ref/source/stepdown.cc b/crawl-ref/source/stepdown.cc
new file mode 100644
index 0000000000..124cf605d4
--- /dev/null
+++ b/crawl-ref/source/stepdown.cc
@@ -0,0 +1,66 @@
+/**
+ * @file
+ * @brief Stepdown functions.
+**/
+
+#include "AppHdr.h"
+#include "stepdown.h"
+
+#include <cmath>
+
+#include "random.h"
+
+#ifdef __ANDROID__
+#include <android/log.h>
+double log2(double n)
+{
+ return log(n) / log(2); // :(
+}
+#endif
+
+double stepdown(double value, double step)
+{
+ return step * log2(1 + value / step);
+}
+
+int stepdown(int value, int step, rounding_type rounding, int max)
+{
+ double ret = stepdown((double) value, double(step));
+
+ if (max > 0 && ret > max)
+ return max;
+
+ // Randomised rounding
+ if (rounding == ROUND_RANDOM)
+ {
+ double intpart;
+ double fracpart = modf(ret, &intpart);
+ if (decimal_chance(fracpart))
+ ++intpart;
+ return intpart;
+ }
+
+ return ret + (rounding == ROUND_CLOSE ? 0.5 : 0);
+}
+
+// Deprecated definition. Call directly stepdown instead.
+int stepdown_value(int base_value, int stepping, int first_step,
+ int last_step, int ceiling_value)
+{
+ UNUSED(last_step);
+
+ // Disabling max used to be -1.
+ if (ceiling_value < 0)
+ ceiling_value = 0;
+
+ if (ceiling_value && ceiling_value < first_step)
+ return min(base_value, ceiling_value);
+ if (base_value < first_step)
+ return base_value;
+
+ const int diff = first_step - stepping;
+ // Since diff < first_step, we can assume here that ceiling_value > diff
+ // or ceiling_value == 0.
+ return diff + stepdown(base_value - diff, stepping, ROUND_DOWN,
+ ceiling_value ? ceiling_value - diff : 0);
+}
diff --git a/crawl-ref/source/stuff.h b/crawl-ref/source/stepdown.h
index 998cfdf780..864fb4b3df 100644
--- a/crawl-ref/source/stuff.h
+++ b/crawl-ref/source/stepdown.h
@@ -1,18 +1,10 @@
/**
* @file
- * @brief Misc stuff.
+ * @brief Stepdown functions.
**/
-#ifndef STUFF_H
-#define STUFF_H
-
-#include <map>
-#include "player.h"
-
-// time
-
-string make_time_string(time_t abs_time, bool terse = false);
-string make_file_time(time_t when);
+#ifndef STEPDOWN_H
+#define STEPDOWN_H
// stepdowns
diff --git a/crawl-ref/source/store.cc b/crawl-ref/source/store.cc
index 9abb559fa7..17dbe03139 100644
--- a/crawl-ref/source/store.cc
+++ b/crawl-ref/source/store.cc
@@ -10,8 +10,8 @@
#include "dlua.h"
#include "externs.h"
-#include "libutil.h"
#include "monster.h"
+#include "strings.h"
#include "tags.h"
#include "travel.h"
diff --git a/crawl-ref/source/strings.cc b/crawl-ref/source/strings.cc
new file mode 100644
index 0000000000..661934f482
--- /dev/null
+++ b/crawl-ref/source/strings.cc
@@ -0,0 +1,435 @@
+/**
+ * @file
+ * @brief String manipulation functions that don't fit elsewhere.
+ **/
+
+#include "AppHdr.h"
+#include "strings.h"
+
+#include "random.h"
+#include "unicode.h"
+
+#ifndef CRAWL_HAVE_STRLCPY
+size_t strlcpy(char *dst, const char *src, size_t n)
+{
+ if (!n)
+ return strlen(src);
+
+ const char *s = src;
+
+ while (--n > 0)
+ if (!(*dst++ = *s++))
+ break;
+
+ if (!n)
+ {
+ *dst++ = 0;
+ while (*s++)
+ ;
+ }
+
+ return s - src - 1;
+}
+#endif
+
+
+string lowercase_string(string s)
+{
+ string res;
+ ucs_t c;
+ char buf[4];
+ for (const char *tp = s.c_str(); int len = utf8towc(&c, tp); tp += len)
+ res.append(buf, wctoutf8(buf, towlower(c)));
+ return res;
+}
+
+string &lowercase(string &s)
+{
+ s = lowercase_string(s);
+ return s;
+}
+
+string &uppercase(string &s)
+{
+ for (unsigned i = 0, sz = s.size(); i < sz; ++i)
+ s[i] = toupper(s[i]);
+
+ return s;
+}
+
+
+
+// Warning: this (and uppercase_first()) relies on no libc (glibc, BSD libc,
+// MSVC crt) supporting letters that expand or contract, like German ß (-> SS)
+// upon capitalization / lowercasing. This is mostly a fault of the API --
+// there's no way to return two characters in one code point.
+// Also, all characters must have the same length in bytes before and after
+// lowercasing, all platforms currently have this property.
+//
+// A non-hacky version would be slower for no gain other than sane code; at
+// least unless you use some more powerful API.
+string lowercase_first(string s)
+{
+ ucs_t c;
+ if (!s.empty())
+ {
+ utf8towc(&c, &s[0]);
+ wctoutf8(&s[0], towlower(c));
+ }
+ return s;
+}
+
+string uppercase_first(string s)
+{
+ // Incorrect due to those pesky Dutch having "ij" as a single letter (wtf?).
+ // Too bad, there's no standard function to handle that character, and I
+ // don't care enough.
+ ucs_t c;
+ if (!s.empty())
+ {
+ utf8towc(&c, &s[0]);
+ wctoutf8(&s[0], towupper(c));
+ }
+ return s;
+}
+
+int ends_with(const string &s, const char *suffixes[])
+{
+ if (!suffixes)
+ return 0;
+
+ for (int i = 0; suffixes[i]; ++i)
+ if (ends_with(s, suffixes[i]))
+ return 1 + i;
+
+ return 0;
+}
+
+
+static const string _get_indent(const string &s)
+{
+ size_t prefix = 0;
+ if (starts_with(s, "\"") // ASCII quotes
+ || starts_with(s, "“") // English quotes
+ || starts_with(s, "„") // Polish/German/... quotes
+ || starts_with(s, "«") // French quotes
+ || starts_with(s, "»") // Danish/... quotes
+ || starts_with(s, "•")) // bulleted lists
+ {
+ prefix = 1;
+ }
+ else if (starts_with(s, "「")) // Chinese/Japanese quotes
+ prefix = 2;
+
+ size_t nspaces = s.find_first_not_of(' ', prefix);
+ if (nspaces == string::npos)
+ nspaces = 0;
+ if (!(prefix += nspaces))
+ return "";
+ return string(prefix, ' ');
+}
+
+
+// The provided string is consumed!
+string wordwrap_line(string &s, int width, bool tags, bool indent)
+{
+ const char *cp0 = s.c_str();
+ const char *cp = cp0, *space = 0;
+ ucs_t c;
+
+ while (int clen = utf8towc(&c, cp))
+ {
+ int cw = wcwidth(c);
+ if (c == ' ')
+ space = cp;
+ else if (c == '\n')
+ {
+ space = cp;
+ break;
+ }
+ if (c == '<' && tags)
+ {
+ ASSERT(cw == 1);
+ if (cp[1] == '<') // "<<" escape
+ {
+ // Note: this must be after a possible wrap, otherwise we could
+ // split the escape between lines.
+ cp++;
+ }
+ else
+ {
+ cw = 0;
+ // Skip the whole tag.
+ while (*cp != '>')
+ {
+ if (!*cp)
+ {
+ // Everything so far fitted, report error.
+ string ret = s + ">";
+ s = "<lightred>ERROR: string above had unterminated tag</lightred>";
+ return ret;
+ }
+ cp++;
+ }
+ }
+ }
+
+ if (cw > width)
+ break;
+
+ if (cw >= 0)
+ width -= cw;
+ cp += clen;
+ }
+
+ if (!c)
+ {
+ // everything fits
+ string ret = s;
+ s.clear();
+ return ret;
+ }
+
+ if (space)
+ cp = space;
+ const string ret = s.substr(0, cp - cp0);
+
+ const string indentation = (indent && c != '\n') ? _get_indent(s) : "";
+
+ // eat all trailing spaces and up to one newline
+ while (*cp == ' ')
+ cp++;
+ if (*cp == '\n')
+ cp++;
+ s.erase(0, cp - cp0);
+
+ // if we had to break a line, reinsert the indendation
+ if (indent && c != '\n')
+ s = indentation + s;
+
+ return ret;
+}
+
+string strip_filename_unsafe_chars(const string &s)
+{
+ return replace_all_of(s, " .&`\"\'|;{}()[]<>*%$#@!~?", "");
+}
+
+string vmake_stringf(const char* s, va_list args)
+{
+ char buf1[8000];
+ va_list orig_args;
+ va_copy(orig_args, args);
+ size_t len = vsnprintf(buf1, sizeof buf1, s, orig_args);
+ va_end(orig_args);
+ if (len < sizeof buf1)
+ return buf1;
+
+ char *buf2 = (char*)malloc(len + 1);
+ va_copy(orig_args, args);
+ vsnprintf(buf2, len + 1, s, orig_args);
+ va_end(orig_args);
+ string ret(buf2);
+ free(buf2);
+
+ return ret;
+}
+
+string make_stringf(const char *s, ...)
+{
+ va_list args;
+ va_start(args, s);
+ string ret = vmake_stringf(s, args);
+ va_end(args);
+ return ret;
+}
+
+bool strip_suffix(string &s, const string &suffix)
+{
+ if (ends_with(s, suffix))
+ {
+ s.erase(s.length() - suffix.length(), suffix.length());
+ trim_string(s);
+ return true;
+ }
+ return false;
+}
+
+string replace_all(string s, const string &find, const string &repl)
+{
+ ASSERT(!find.empty());
+ string::size_type start = 0;
+ string::size_type found;
+
+ while ((found = s.find(find, start)) != string::npos)
+ {
+ s.replace(found, find.length(), repl);
+ start = found + repl.length();
+ }
+
+ return s;
+}
+
+// Replaces all occurrences of any of the characters in tofind with the
+// replacement string.
+string replace_all_of(string s, const string &tofind, const string &replacement)
+{
+ ASSERT(!tofind.empty());
+ string::size_type start = 0;
+ string::size_type found;
+
+ while ((found = s.find_first_of(tofind, start)) != string::npos)
+ {
+ s.replace(found, 1, replacement);
+ start = found + replacement.length();
+ }
+
+ return s;
+}
+
+// Capitalise phrases encased in @CAPS@ ... @NOCAPS@. If @NOCAPS@ is
+// missing, change the rest of the line to uppercase.
+string maybe_capitalise_substring(string s)
+{
+ string::size_type start = 0;
+ while ((start = s.find("@CAPS@", start)) != string::npos)
+ {
+ string::size_type cap_start = start + 6;
+ string::size_type cap_end = string::npos;
+ string::size_type end = s.find("@NOCAPS@", cap_start);
+ string::size_type length = string::npos;
+ string::size_type cap_length = string::npos;
+ if (end != string::npos)
+ {
+ cap_end = end + 8;
+ cap_length = end - cap_start;
+ length = cap_end - start;
+ }
+ string substring = s.substr(cap_start, cap_length);
+ trim_string(substring);
+ s.replace(start, length, uppercase(substring));
+ }
+ return s;
+}
+
+// For each set of [phrase|term|word] contained in the string, replace the set with a random subphrase.
+// NOTE: Doesn't work for nested patterns!
+string maybe_pick_random_substring(string s)
+{
+ string::size_type start = 0;
+ while ((start = s.find("[", start)) != string::npos)
+ {
+ string::size_type end = s.find("]", start);
+ if (end == string::npos)
+ break;
+
+ string substring = s.substr(start + 1, end - start - 1);
+ vector<string> split = split_string("|", substring, false, true);
+ int index = random2(split.size());
+ s.replace(start, end + 1 - start, split[index]);
+ }
+ return s;
+}
+
+int count_occurrences(const string &text, const string &s)
+{
+ ASSERT(!s.empty());
+ int nfound = 0;
+ string::size_type pos = 0;
+
+ while ((pos = text.find(s, pos)) != string::npos)
+ {
+ ++nfound;
+ pos += s.length();
+ }
+
+ return nfound;
+}
+
+// also used with macros
+string &trim_string(string &str)
+{
+ str.erase(0, str.find_first_not_of(" \t\n\r"));
+ str.erase(str.find_last_not_of(" \t\n\r") + 1);
+
+ return str;
+}
+
+string &trim_string_right(string &str)
+{
+ str.erase(str.find_last_not_of(" \t\n\r") + 1);
+ return str;
+}
+
+string trimmed_string(string s)
+{
+ trim_string(s);
+ return s;
+}
+
+static void add_segment(vector<string> &segs, string s, bool trim,
+ bool accept_empty)
+{
+ if (trim && !s.empty())
+ trim_string(s);
+
+ if (accept_empty || !s.empty())
+ segs.push_back(s);
+}
+
+vector<string> split_string(const string &sep, string s, bool trim_segments,
+ bool accept_empty_segments, int nsplits)
+{
+ vector<string> segments;
+ int separator_length = sep.length();
+
+ string::size_type pos;
+ while (nsplits && (pos = s.find(sep)) != string::npos)
+ {
+ add_segment(segments, s.substr(0, pos),
+ trim_segments, accept_empty_segments);
+
+ s.erase(0, pos + separator_length);
+
+ if (nsplits > 0)
+ --nsplits;
+ }
+
+ if (!s.empty())
+ add_segment(segments, s, trim_segments, accept_empty_segments);
+
+ return segments;
+}
+
+
+// Crude, but functional.
+string make_time_string(time_t abs_time, bool terse)
+{
+ const int days = abs_time / 86400;
+ const int hours = (abs_time % 86400) / 3600;
+ const int mins = (abs_time % 3600) / 60;
+ const int secs = abs_time % 60;
+
+ string buff;
+ if (days > 0)
+ {
+ buff += make_stringf("%d%s ", days, terse ? ","
+ : days > 1 ? "days" : "day");
+ }
+ return buff + make_stringf("%02d:%02d:%02d", hours, mins, secs);
+}
+
+string make_file_time(time_t when)
+{
+ if (tm *loc = TIME_FN(&when))
+ {
+ return make_stringf("%04d%02d%02d-%02d%02d%02d",
+ loc->tm_year + 1900,
+ loc->tm_mon + 1,
+ loc->tm_mday,
+ loc->tm_hour,
+ loc->tm_min,
+ loc->tm_sec);
+ }
+ return "";
+}
diff --git a/crawl-ref/source/strings.h b/crawl-ref/source/strings.h
new file mode 100644
index 0000000000..e1a4293cdf
--- /dev/null
+++ b/crawl-ref/source/strings.h
@@ -0,0 +1,96 @@
+/**
+ * @file
+ * @brief String manipulation functions that don't fit elsewhere.
+ **/
+
+#ifndef STRINGS_H
+#define STRINGS_H
+
+#ifdef CRAWL_HAVE_STRLCPY
+#include <cstring>
+#else
+size_t strlcpy(char *dst, const char *src, size_t n);
+#endif
+
+string lowercase_string(string s);
+string &lowercase(string &s);
+string &uppercase(string &s);
+string lowercase_first(string);
+string uppercase_first(string);
+
+/**
+ * Returns 1 + the index of the first suffix that matches the given string,
+ * 0 if no suffixes match.
+ */
+int ends_with(const string &s, const char *suffixes[]);
+
+string wordwrap_line(string &s, int cols, bool tags = false,
+ bool indent = false);
+
+string strip_filename_unsafe_chars(const string &s);
+
+string vmake_stringf(const char *format, va_list args);
+string make_stringf(PRINTF(0, ));
+
+bool strip_suffix(string &s, const string &suffix);
+
+string replace_all(string s, const string &tofind, const string &replacement);
+
+string replace_all_of(string s, const string &tofind, const string &replacement);
+
+string maybe_capitalise_substring(string s);
+string maybe_pick_random_substring(string s);
+
+int count_occurrences(const string &text, const string &searchfor);
+
+string &trim_string(string &str);
+string &trim_string_right(string &str);
+string trimmed_string(string s);
+
+template <typename Z>
+string comma_separated_line(Z start, Z end, const string &andc = " and ",
+ const string &comma = ", ")
+{
+ string text;
+ for (Z i = start; i != end; ++i)
+ {
+ if (i != start)
+ {
+ Z tmp = i;
+ if (++tmp != end)
+ text += comma;
+ else
+ text += andc;
+ }
+
+ text += *i;
+ }
+ return text;
+}
+
+static inline bool starts_with(const string &s, const string &prefix)
+{
+ return s.rfind(prefix, 0) != string::npos;
+}
+
+static inline bool ends_with(const string &s, const string &suffix)
+{
+ if (s.length() < suffix.length())
+ return false;
+ return s.find(suffix, s.length() - suffix.length()) != string::npos;
+}
+
+// Splits string 's' on the separator 'sep'. If trim == true, trims each
+// segment. If accept_empties == true, accepts empty segments. If nsplits >= 0,
+// splits on the first nsplits occurrences of the separator, and stores the
+// remainder of the string as the last segment; negative values of nsplits
+// split on all occurrences of the separator.
+vector<string> split_string(const string &sep, string s, bool trim = true,
+ bool accept_empties = false, int nsplits = -1);
+
+// time
+
+string make_time_string(time_t abs_time, bool terse = false);
+string make_file_time(time_t when);
+
+#endif
diff --git a/crawl-ref/source/stuff.cc b/crawl-ref/source/stuff.cc
deleted file mode 100644
index 11ea386d7a..0000000000
--- a/crawl-ref/source/stuff.cc
+++ /dev/null
@@ -1,136 +0,0 @@
-/**
- * @file
- * @brief Misc stuff.
-**/
-
-#include "AppHdr.h"
-#include "stuff.h"
-
-#include <cstdarg>
-#include <sstream>
-#include <iomanip>
-#include <algorithm>
-
-#include <errno.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <time.h>
-#include <math.h>
-
-#include "abyss.h"
-#include "cio.h"
-#include "colour.h"
-#include "crash.h"
-#include "database.h"
-#include "delay.h"
-#include "dungeon.h"
-#include "files.h"
-#include "hints.h"
-#include "libutil.h"
-#include "los.h"
-#include "macro.h"
-#include "menu.h"
-#include "message.h"
-#include "notes.h"
-#include "options.h"
-#include "output.h"
-#include "player.h"
-#include "state.h"
-#include "traps.h"
-#include "view.h"
-#include "viewchar.h"
-#include "viewgeom.h"
-
-#ifdef TOUCH_UI
-#include "tilepick.h"
-#include "tiledef-gui.h"
-#endif
-
-#ifdef __ANDROID__
-#include <android/log.h>
-double log2(double n)
-{
- return log(n) / log(2); // :(
-}
-#endif
-
-// Crude, but functional.
-string make_time_string(time_t abs_time, bool terse)
-{
- const int days = abs_time / 86400;
- const int hours = (abs_time % 86400) / 3600;
- const int mins = (abs_time % 3600) / 60;
- const int secs = abs_time % 60;
-
- string buff;
- if (days > 0)
- {
- buff += make_stringf("%d%s ", days, terse ? ","
- : days > 1 ? "days" : "day");
- }
- return buff + make_stringf("%02d:%02d:%02d", hours, mins, secs);
-}
-
-string make_file_time(time_t when)
-{
- if (tm *loc = TIME_FN(&when))
- {
- return make_stringf("%04d%02d%02d-%02d%02d%02d",
- loc->tm_year + 1900,
- loc->tm_mon + 1,
- loc->tm_mday,
- loc->tm_hour,
- loc->tm_min,
- loc->tm_sec);
- }
- return "";
-}
-
-double stepdown(double value, double step)
-{
- return step * log2(1 + value / step);
-}
-
-int stepdown(int value, int step, rounding_type rounding, int max)
-{
- double ret = stepdown((double) value, double(step));
-
- if (max > 0 && ret > max)
- return max;
-
- // Randomised rounding
- if (rounding == ROUND_RANDOM)
- {
- double intpart;
- double fracpart = modf(ret, &intpart);
- if (decimal_chance(fracpart))
- ++intpart;
- return intpart;
- }
-
- return ret + (rounding == ROUND_CLOSE ? 0.5 : 0);
-}
-
-// Deprecated definition. Call directly stepdown instead.
-int stepdown_value(int base_value, int stepping, int first_step,
- int last_step, int ceiling_value)
-{
- UNUSED(last_step);
-
- // Disabling max used to be -1.
- if (ceiling_value < 0)
- ceiling_value = 0;
-
- if (ceiling_value && ceiling_value < first_step)
- return min(base_value, ceiling_value);
- if (base_value < first_step)
- return base_value;
-
- const int diff = first_step - stepping;
- // Since diff < first_step, we can assume here that ceiling_value > diff
- // or ceiling_value == 0.
- return diff + stepdown(base_value - diff, stepping, ROUND_DOWN,
- ceiling_value ? ceiling_value - diff : 0);
-}
diff --git a/crawl-ref/source/tags.cc b/crawl-ref/source/tags.cc
index 1503bd3e43..6e8cef87b6 100644
--- a/crawl-ref/source/tags.cc
+++ b/crawl-ref/source/tags.cc
@@ -69,6 +69,7 @@
#include "state.h"
#include "env.h"
#include "spl-wpnench.h"
+#include "strings.h"
#include "syscalls.h"
#include "tags.h"
#include "terrain.h"
diff --git a/crawl-ref/source/terrain.cc b/crawl-ref/source/terrain.cc
index bcd44709af..a3e6fbf0da 100644
--- a/crawl-ref/source/terrain.cc
+++ b/crawl-ref/source/terrain.cc
@@ -38,6 +38,7 @@
#include "spl-transloc.h"
#include "env.h"
#include "state.h"
+#include "strings.h"
#include "tileview.h"
#include "travel.h"
#include "transform.h"
diff --git a/crawl-ref/source/throw.cc b/crawl-ref/source/throw.cc
index 6be3f52e0b..20c58c9578 100644
--- a/crawl-ref/source/throw.cc
+++ b/crawl-ref/source/throw.cc
@@ -42,7 +42,7 @@
#include "skills2.h"
#include "spl-summoning.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "teleport.h"
#include "terrain.h"
#include "transform.h"
diff --git a/crawl-ref/source/tilepick.cc b/crawl-ref/source/tilepick.cc
index 8db0aa377f..81261dc0ae 100644
--- a/crawl-ref/source/tilepick.cc
+++ b/crawl-ref/source/tilepick.cc
@@ -22,6 +22,7 @@
#include "player.h"
#include "shopping.h"
#include "state.h"
+#include "strings.h"
#include "terrain.h"
#include "tiledef-dngn.h"
#include "tiledef-gui.h"
diff --git a/crawl-ref/source/tilereg-abl.cc b/crawl-ref/source/tilereg-abl.cc
index c69d741f41..5a4b957db8 100644
--- a/crawl-ref/source/tilereg-abl.cc
+++ b/crawl-ref/source/tilereg-abl.cc
@@ -11,7 +11,7 @@
#include "macro.h"
#include "message.h"
#include "output.h"
-#include "stuff.h"
+
#include "tiledef-dngn.h"
#include "tiledef-icons.h"
#include "tilepick.h"
diff --git a/crawl-ref/source/tilereg-dgn.cc b/crawl-ref/source/tilereg-dgn.cc
index bf2dc4e004..14f2f804ba 100644
--- a/crawl-ref/source/tilereg-dgn.cc
+++ b/crawl-ref/source/tilereg-dgn.cc
@@ -27,7 +27,7 @@
#include "spl-cast.h"
#include "spl-util.h"
#include "stash.h"
-#include "stuff.h"
+
#include "terrain.h"
#include "tiledef-icons.h"
#include "tiledef-main.h"
diff --git a/crawl-ref/source/tilereg-doll.cc b/crawl-ref/source/tilereg-doll.cc
index 2b5d88c2f6..f5f9d6d1be 100644
--- a/crawl-ref/source/tilereg-doll.cc
+++ b/crawl-ref/source/tilereg-doll.cc
@@ -4,9 +4,9 @@
#include "tilereg-doll.h"
-#include "libutil.h"
#include "macro.h"
#include "player.h"
+#include "strings.h"
#include "tiledef-player.h"
#include "tilefont.h"
#include "tilepick-p.h"
diff --git a/crawl-ref/source/tilereg-inv.cc b/crawl-ref/source/tilereg-inv.cc
index 49a8d3f341..2cc4b8c6fb 100644
--- a/crawl-ref/source/tilereg-inv.cc
+++ b/crawl-ref/source/tilereg-inv.cc
@@ -22,7 +22,7 @@
#include "options.h"
#include "output.h"
#include "spl-book.h"
-#include "stuff.h"
+
#include "tiledef-dngn.h"
#include "tiledef-icons.h"
#include "tiledef-icons.h"
diff --git a/crawl-ref/source/tilereg-mem.cc b/crawl-ref/source/tilereg-mem.cc
index b6e0e27111..537c57c2f1 100644
--- a/crawl-ref/source/tilereg-mem.cc
+++ b/crawl-ref/source/tilereg-mem.cc
@@ -6,14 +6,13 @@
#include "cio.h"
#include "describe.h"
-#include "libutil.h"
#include "macro.h"
#include "output.h"
#include "religion.h"
#include "spl-book.h"
#include "spl-cast.h"
#include "spl-util.h"
-#include "stuff.h"
+#include "strings.h"
#include "tilepick.h"
MemoriseRegion::MemoriseRegion(const TileRegionInit &init) : SpellRegion(init)
diff --git a/crawl-ref/source/tilereg-mon.cc b/crawl-ref/source/tilereg-mon.cc
index bb6ce58fe5..da26333f50 100644
--- a/crawl-ref/source/tilereg-mon.cc
+++ b/crawl-ref/source/tilereg-mon.cc
@@ -12,7 +12,7 @@
#include "libutil.h"
#include "monster.h"
#include "output.h"
-#include "stuff.h"
+
#include "tiledef-dngn.h"
#include "tiledef-icons.h"
#include "tiledef-player.h"
diff --git a/crawl-ref/source/tilereg-skl.cc b/crawl-ref/source/tilereg-skl.cc
index 23a81a217c..78d9f64d51 100644
--- a/crawl-ref/source/tilereg-skl.cc
+++ b/crawl-ref/source/tilereg-skl.cc
@@ -11,7 +11,7 @@
#include "output.h"
#include "skills.h"
#include "skills2.h"
-#include "stuff.h"
+
#include "tiledef-icons.h"
#include "tilepick.h"
#include "viewgeom.h"
diff --git a/crawl-ref/source/tilereg-spl.cc b/crawl-ref/source/tilereg-spl.cc
index 9843314b75..162d905161 100644
--- a/crawl-ref/source/tilereg-spl.cc
+++ b/crawl-ref/source/tilereg-spl.cc
@@ -13,7 +13,7 @@
#include "prompt.h"
#include "spl-cast.h"
#include "spl-util.h"
-#include "stuff.h"
+
#include "tiledef-dngn.h"
#include "tiledef-icons.h"
#include "tiledef-main.h"
diff --git a/crawl-ref/source/tilereg-tab.cc b/crawl-ref/source/tilereg-tab.cc
index fcedce0497..bb73b20319 100644
--- a/crawl-ref/source/tilereg-tab.cc
+++ b/crawl-ref/source/tilereg-tab.cc
@@ -4,11 +4,12 @@
#include "tilereg-tab.h"
+#include "cio.h"
#include "libutil.h"
+#include "macro.h"
#include "state.h"
+#include "strings.h"
#include "tiledef-gui.h"
-#include "cio.h"
-#include "macro.h"
TabbedRegion::TabbedRegion(const TileRegionInit &init) :
GridRegion(init),
diff --git a/crawl-ref/source/tileview.cc b/crawl-ref/source/tileview.cc
index 7f3d17750f..095710e740 100644
--- a/crawl-ref/source/tileview.cc
+++ b/crawl-ref/source/tileview.cc
@@ -17,7 +17,7 @@
#include "options.h"
#include "player.h"
#include "state.h"
-#include "stuff.h"
+
#include "terrain.h"
#include "tiledef-dngn.h"
#include "tiledef-player.h"
diff --git a/crawl-ref/source/tileweb.cc b/crawl-ref/source/tileweb.cc
index 70c9624e83..d7dd0a4f18 100644
--- a/crawl-ref/source/tileweb.cc
+++ b/crawl-ref/source/tileweb.cc
@@ -20,7 +20,7 @@
#include "player.h"
#include "religion.h"
#include "state.h"
-#include "stuff.h"
+
#include "skills2.h"
#include "tiledef-dngn.h"
#include "tiledef-gui.h"
diff --git a/crawl-ref/source/transform.cc b/crawl-ref/source/transform.cc
index a07732a71a..99110e9a49 100644
--- a/crawl-ref/source/transform.cc
+++ b/crawl-ref/source/transform.cc
@@ -37,7 +37,7 @@
#include "religion.h"
#include "skills2.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "terrain.h"
#include "traps.h"
#include "xom.h"
diff --git a/crawl-ref/source/traps.cc b/crawl-ref/source/traps.cc
index da3cc87b83..fd32eba65a 100644
--- a/crawl-ref/source/traps.cc
+++ b/crawl-ref/source/traps.cc
@@ -50,7 +50,7 @@
#include "spl-util.h"
#include "stash.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "travel.h"
#include "terrain.h"
#include "transform.h"
diff --git a/crawl-ref/source/travel.cc b/crawl-ref/source/travel.cc
index b1079b1dd6..41518104b8 100644
--- a/crawl-ref/source/travel.cc
+++ b/crawl-ref/source/travel.cc
@@ -48,11 +48,12 @@
#include "stairs.h"
#include "stash.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "tags.h"
#include "terrain.h"
#include "traps.h"
#include "travel.h"
+#include "unicode.h"
#include "unwind.h"
#include "view.h"
diff --git a/crawl-ref/source/tutorial.cc b/crawl-ref/source/tutorial.cc
index b4e60b26f0..590c7306d4 100644
--- a/crawl-ref/source/tutorial.cc
+++ b/crawl-ref/source/tutorial.cc
@@ -13,7 +13,7 @@
#include "player.h"
#include "skills.h"
#include "state.h"
-#include "stuff.h"
+
void set_tutorial_hunger(int hunger)
{
diff --git a/crawl-ref/source/unicode.h b/crawl-ref/source/unicode.h
index f9913f7540..9807b4e5f9 100644
--- a/crawl-ref/source/unicode.h
+++ b/crawl-ref/source/unicode.h
@@ -6,6 +6,11 @@
#ifndef UNICODE_H
#define UNICODE_H
+int strwidth(const char *s);
+int strwidth(const string &s);
+string chop_string(const char *s, int width, bool spaces = true);
+string chop_string(const string &s, int width, bool spaces = true);
+
int wctoutf8(char *d, ucs_t s);
int utf8towc(ucs_t *d, const char *s);
#ifdef TARGET_OS_WINDOWS
diff --git a/crawl-ref/source/util/levcomp.ypp b/crawl-ref/source/util/levcomp.ypp
index be72e0b7e6..cb916d5e51 100644
--- a/crawl-ref/source/util/levcomp.ypp
+++ b/crawl-ref/source/util/levcomp.ypp
@@ -6,9 +6,9 @@
#include <algorithm>
#include "end.h"
#include "l_defs.h"
-#include "libutil.h"
#include "mapdef.h"
#include "maps.h"
+#include "strings.h"
#define YYERROR_VERBOSE 1
#define YYENABLE_NLS 0
diff --git a/crawl-ref/source/view.cc b/crawl-ref/source/view.cc
index 24fdc95714..e4889af4de 100644
--- a/crawl-ref/source/view.cc
+++ b/crawl-ref/source/view.cc
@@ -52,12 +52,13 @@
#include "religion.h"
#include "showsymb.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "target.h"
#include "terrain.h"
#include "tilemcache.h"
#include "traps.h"
#include "travel.h"
+#include "unicode.h"
#include "viewchar.h"
#include "viewmap.h"
#include "xom.h"
diff --git a/crawl-ref/source/viewgeom.cc b/crawl-ref/source/viewgeom.cc
index eb861d9cb9..7f51963af3 100644
--- a/crawl-ref/source/viewgeom.cc
+++ b/crawl-ref/source/viewgeom.cc
@@ -6,7 +6,7 @@
#include "options.h"
#include "player.h"
#include "state.h"
-#include "stuff.h"
+
// ----------------------------------------------------------------------
// Layout helper classes
diff --git a/crawl-ref/source/viewmap.cc b/crawl-ref/source/viewmap.cc
index 9b0a6a99cd..daf05aa817 100644
--- a/crawl-ref/source/viewmap.cc
+++ b/crawl-ref/source/viewmap.cc
@@ -34,10 +34,10 @@
#include "showsymb.h"
#include "stash.h"
#include "state.h"
-#include "stuff.h"
#include "terrain.h"
#include "tileview.h"
#include "travel.h"
+#include "unicode.h"
#include "viewchar.h"
#include "viewgeom.h"
diff --git a/crawl-ref/source/wiz-dgn.cc b/crawl-ref/source/wiz-dgn.cc
index 0503755ba1..fa1197b832 100644
--- a/crawl-ref/source/wiz-dgn.cc
+++ b/crawl-ref/source/wiz-dgn.cc
@@ -34,7 +34,7 @@
#include "religion.h"
#include "stairs.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "terrain.h"
#include "tileview.h"
#include "travel.h"
diff --git a/crawl-ref/source/wiz-fsim.cc b/crawl-ref/source/wiz-fsim.cc
index ce578890cd..5de51aeeca 100644
--- a/crawl-ref/source/wiz-fsim.cc
+++ b/crawl-ref/source/wiz-fsim.cc
@@ -37,7 +37,7 @@
#include "skills2.h"
#include "species.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "throw.h"
#include "unwind.h"
#include "version.h"
diff --git a/crawl-ref/source/wiz-item.cc b/crawl-ref/source/wiz-item.cc
index d03060ad3d..86a755cffb 100644
--- a/crawl-ref/source/wiz-item.cc
+++ b/crawl-ref/source/wiz-item.cc
@@ -39,7 +39,9 @@
#include "spl-book.h"
#include "spl-util.h"
#include "stash.h"
+#include "strings.h"
#include "terrain.h"
+#include "unicode.h"
#ifdef WIZARD
static void _make_all_books()
diff --git a/crawl-ref/source/wiz-mon.cc b/crawl-ref/source/wiz-mon.cc
index 83d0d5500b..02d8c2142c 100644
--- a/crawl-ref/source/wiz-mon.cc
+++ b/crawl-ref/source/wiz-mon.cc
@@ -44,7 +44,7 @@
#include "spl-miscast.h"
#include "spl-util.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "terrain.h"
#include "unwind.h"
#include "view.h"
diff --git a/crawl-ref/source/wiz-you.cc b/crawl-ref/source/wiz-you.cc
index 1b61237815..8cfb0323d5 100644
--- a/crawl-ref/source/wiz-you.cc
+++ b/crawl-ref/source/wiz-you.cc
@@ -32,7 +32,7 @@
#include "spl-util.h"
#include "state.h"
#include "status.h"
-#include "stuff.h"
+#include "strings.h"
#include "terrain.h"
#include "transform.h"
#include "view.h"
diff --git a/crawl-ref/source/xom.cc b/crawl-ref/source/xom.cc
index 80a9fda1f0..83add871fa 100644
--- a/crawl-ref/source/xom.cc
+++ b/crawl-ref/source/xom.cc
@@ -65,7 +65,8 @@
#include "stairs.h"
#include "stash.h"
#include "state.h"
-#include "stuff.h"
+#include "stepdown.h"
+#include "strings.h"
#include "teleport.h"
#include "terrain.h"
#include "transform.h"
diff --git a/crawl-ref/source/zotdef.cc b/crawl-ref/source/zotdef.cc
index f76458b965..a945f903de 100644
--- a/crawl-ref/source/zotdef.cc
+++ b/crawl-ref/source/zotdef.cc
@@ -30,7 +30,7 @@
#include "random.h"
#include "religion.h"
#include "state.h"
-#include "stuff.h"
+#include "strings.h"
#include "terrain.h"
#include "traps.h"
#include "libutil.h"