summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Nathan Woods <npwoods@mess.org>2016-09-03 16:11:58 -0400
committer Nathan Woods <npwoods@mess.org>2016-09-03 16:11:58 -0400
commit4251194fe5b9f4d7551c362326e7ca20bc7da99b (patch)
treeb82bba2120de1fbfd16631b91ba8b479e2ccf9fe
parentbe3c18302e117049c0f4c75f719afc3d3d69aa08 (diff)
Worked around the OPTION_GUIDE_EXTERN issue by using a crazy trick involving namespaces
Caveats: 1. Because of how this trick works, it is no longer possible to declare an option guide as static, so I had to make a bunch of changes 2. I'm going to want the hardcore C++ guys (i.e. - Vas) to review this with a fine toothed comb
-rw-r--r--src/devices/imagedev/diablo.cpp2
-rw-r--r--src/devices/imagedev/harddriv.cpp2
-rw-r--r--src/emu/diimage.cpp2
-rw-r--r--src/lib/formats/flopimg.cpp3
-rw-r--r--src/lib/util/opresolv.h27
-rw-r--r--src/mame/machine/psion_pack.cpp2
-rw-r--r--src/tools/imgtool/imghd.cpp2
-rw-r--r--src/tools/imgtool/modules/amiga.cpp2
-rw-r--r--src/tools/imgtool/modules/bml3.cpp2
-rw-r--r--src/tools/imgtool/modules/cybiko.cpp2
-rw-r--r--src/tools/imgtool/modules/hp48.cpp2
-rw-r--r--src/tools/imgtool/modules/pc_hard.cpp2
-rw-r--r--src/tools/imgtool/modules/psion.cpp4
-rw-r--r--src/tools/imgtool/modules/rsdos.cpp2
-rw-r--r--src/tools/imgtool/modules/thomson.cpp4
-rw-r--r--src/tools/imgtool/modules/ti99.cpp2
-rw-r--r--src/tools/imgtool/modules/ti990hd.cpp2
-rw-r--r--src/tools/imgtool/modules/vzdos.cpp2
18 files changed, 37 insertions, 29 deletions
diff --git a/src/devices/imagedev/diablo.cpp b/src/devices/imagedev/diablo.cpp
index 5009c0fc872..238e0dd5a89 100644
--- a/src/devices/imagedev/diablo.cpp
+++ b/src/devices/imagedev/diablo.cpp
@@ -10,7 +10,7 @@
#include "diablo.h"
-static OPTION_GUIDE_START(dsk_option_guide)
+OPTION_GUIDE_START(dsk_option_guide)
OPTION_INT('C', "cylinders", "Cylinders")
OPTION_INT('H', "heads", "Heads")
OPTION_INT('S', "sectors", "Sectors")
diff --git a/src/devices/imagedev/harddriv.cpp b/src/devices/imagedev/harddriv.cpp
index ffc17871050..8070a1d9afe 100644
--- a/src/devices/imagedev/harddriv.cpp
+++ b/src/devices/imagedev/harddriv.cpp
@@ -19,7 +19,7 @@
#include "harddriv.h"
-static OPTION_GUIDE_START(hd_option_guide)
+OPTION_GUIDE_START(hd_option_guide)
OPTION_INT('C', "cylinders", "Cylinders")
OPTION_INT('H', "heads", "Heads")
OPTION_INT('S', "sectors", "Sectors")
diff --git a/src/emu/diimage.cpp b/src/emu/diimage.cpp
index 59f1dc84125..5557abda36e 100644
--- a/src/emu/diimage.cpp
+++ b/src/emu/diimage.cpp
@@ -1227,7 +1227,7 @@ void device_image_interface::unload()
// create_option_guide
//-------------------------------------------------
-static OPTION_GUIDE_START(null_option_guide)
+OPTION_GUIDE_START(null_option_guide)
OPTION_GUIDE_END
const util::option_guide &device_image_interface::create_option_guide() const
diff --git a/src/lib/formats/flopimg.cpp b/src/lib/formats/flopimg.cpp
index e05bd54cf26..9fb487ba971 100644
--- a/src/lib/formats/flopimg.cpp
+++ b/src/lib/formats/flopimg.cpp
@@ -58,7 +58,7 @@ struct floppy_params
static floperr_t floppy_track_unload(floppy_image_legacy *floppy);
-OPTION_GUIDE_START(floppy_option_guide_actual)
+OPTION_GUIDE_START(floppy_option_guide)
OPTION_INT('H', "heads", "Heads")
OPTION_INT('T', "tracks", "Tracks")
OPTION_INT('S', "sectors", "Sectors")
@@ -66,7 +66,6 @@ OPTION_GUIDE_START(floppy_option_guide_actual)
OPTION_INT('I', "interleave", "Interleave")
OPTION_INT('F', "firstsectorid", "First Sector")
OPTION_GUIDE_END
-const util::option_guide &floppy_option_guide = floppy_option_guide_actual;
static void floppy_close_internal(floppy_image_legacy *floppy, int close_file);
diff --git a/src/lib/util/opresolv.h b/src/lib/util/opresolv.h
index 3d04f723840..3d919d26d59 100644
--- a/src/lib/util/opresolv.h
+++ b/src/lib/util/opresolv.h
@@ -50,19 +50,28 @@
// TYPE DEFINITIONS
//**************************************************************************
-#define OPTION_GUIDE_START(option_guide_) \
- const auto option_guide_ = util::make_option_guide(0
-#define OPTION_GUIDE_END \
- );
-#define OPTION_GUIDE_EXTERN(option_guide_) \
+#define OPTION_GUIDE_START(option_guide_) \
+ namespace option_guide_impl_##option_guide_ \
+ { \
+ static const util::option_guide &get(); \
+ }; \
+ const util::option_guide &option_guide_ = option_guide_impl_##option_guide_::get(); \
+ namespace option_guide_impl_##option_guide_ \
+ { \
+ static const auto actual = util::make_option_guide(0
+#define OPTION_GUIDE_END \
+ ); \
+ static const util::option_guide &get() { return actual; } \
+ };
+#define OPTION_GUIDE_EXTERN(option_guide_) \
extern const util::option_guide &option_guide_
-#define OPTION_INT(option_char, identifier, display_name) \
+#define OPTION_INT(option_char, identifier, display_name) \
,util::option_guide::entry(util::option_guide::entry::option_type::INT, (option_char), (identifier), (display_name))
-#define OPTION_STRING(option_char, identifier, display_name) \
+#define OPTION_STRING(option_char, identifier, display_name) \
,util::option_guide::entry(util::option_guide::entry::option_type::STRING, (option_char), (identifier), (display_name))
-#define OPTION_ENUM_START(option_char, identifier, display_name) \
+#define OPTION_ENUM_START(option_char, identifier, display_name) \
,util::option_guide::entry(util::option_guide::entry::option_type::ENUM_BEGIN, (option_char), (identifier), (display_name))
-#define OPTION_ENUM(value, identifier, display_name) \
+#define OPTION_ENUM(value, identifier, display_name) \
,util::option_guide::entry(util::option_guide::entry::option_type::ENUM_VALUE, (value), (identifier), (display_name))
#define OPTION_ENUM_END
diff --git a/src/mame/machine/psion_pack.cpp b/src/mame/machine/psion_pack.cpp
index 52c0e9b9629..5f9550dde73 100644
--- a/src/mame/machine/psion_pack.cpp
+++ b/src/mame/machine/psion_pack.cpp
@@ -40,7 +40,7 @@
#define OPK_HEAD_SIZE 6
-static OPTION_GUIDE_START( datapack_option_guide )
+OPTION_GUIDE_START( datapack_option_guide )
OPTION_INT('S', "size", "Datapack size" )
OPTION_INT('R', "ram", "RAM/EPROM" )
OPTION_INT('P', "paged", "Paged" )
diff --git a/src/tools/imgtool/imghd.cpp b/src/tools/imgtool/imghd.cpp
index 38f26bfaabb..89f543d8185 100644
--- a/src/tools/imgtool/imghd.cpp
+++ b/src/tools/imgtool/imghd.cpp
@@ -226,7 +226,7 @@ enum
mess_hd_createopts_seclen = 'F'
};
-static OPTION_GUIDE_START( mess_hd_create_optionguide )
+OPTION_GUIDE_START( mess_hd_create_optionguide )
OPTION_INT(mess_hd_createopts_blocksize, "blocksize", "Sectors Per Block" )
OPTION_INT(mess_hd_createopts_cylinders, "cylinders", "Cylinders" )
OPTION_INT(mess_hd_createopts_heads, "heads", "Heads" )
diff --git a/src/tools/imgtool/modules/amiga.cpp b/src/tools/imgtool/modules/amiga.cpp
index d85e3698ec9..d506b97cf07 100644
--- a/src/tools/imgtool/modules/amiga.cpp
+++ b/src/tools/imgtool/modules/amiga.cpp
@@ -2342,7 +2342,7 @@ static imgtoolerr_t amiga_image_suggesttransfer(imgtool_partition *partition, co
*****************************************************************************/
-static OPTION_GUIDE_START(amiga_createimage_optionguide)
+OPTION_GUIDE_START(amiga_createimage_optionguide)
OPTION_STRING( 'N', "name", "Volume name" )
OPTION_ENUM_START( 'S', "density", "Density" )
OPTION_ENUM( 0, "dd", "Double Density" )
diff --git a/src/tools/imgtool/modules/bml3.cpp b/src/tools/imgtool/modules/bml3.cpp
index f5e88663928..80048fc340f 100644
--- a/src/tools/imgtool/modules/bml3.cpp
+++ b/src/tools/imgtool/modules/bml3.cpp
@@ -882,7 +882,7 @@ static imgtoolerr_t bml3_diskimage_suggesttransfer(imgtool_partition *partition,
Imgtool module declaration
*********************************************************************/
-static OPTION_GUIDE_START( bml3_writefile_optionguide )
+OPTION_GUIDE_START( bml3_writefile_optionguide )
OPTION_ENUM_START( BML3_OPTIONS_FTYPE, "ftype", "File type" )
OPTION_ENUM( 0, "basic", "Basic" )
OPTION_ENUM( 1, "data", "Data" )
diff --git a/src/tools/imgtool/modules/cybiko.cpp b/src/tools/imgtool/modules/cybiko.cpp
index a822c904cde..a90f9daa745 100644
--- a/src/tools/imgtool/modules/cybiko.cpp
+++ b/src/tools/imgtool/modules/cybiko.cpp
@@ -531,7 +531,7 @@ static imgtoolerr_t cybiko_image_delete_file( imgtool_partition *partition, cons
return IMGTOOLERR_SUCCESS;
}
-static OPTION_GUIDE_START( cybiko_image_createimage_optguide )
+OPTION_GUIDE_START( cybiko_image_createimage_optguide )
OPTION_ENUM_START( 'F', "flash", "Flash Type" )
OPTION_ENUM( 0, "AT45DB041", "AT45DB041 (528 KByte)" )
OPTION_ENUM( 1, "AT45DB081", "AT45DB081 (1056 KByte)" )
diff --git a/src/tools/imgtool/modules/hp48.cpp b/src/tools/imgtool/modules/hp48.cpp
index 46d8674a41a..f73459c3bfd 100644
--- a/src/tools/imgtool/modules/hp48.cpp
+++ b/src/tools/imgtool/modules/hp48.cpp
@@ -136,7 +136,7 @@ static const char* hp48_prefix = "HPHP48-R";
-static OPTION_GUIDE_START( hp48_create_optionguide )
+OPTION_GUIDE_START( hp48_create_optionguide )
OPTION_INT('S', "size", "Size in KB" )
OPTION_GUIDE_END
diff --git a/src/tools/imgtool/modules/pc_hard.cpp b/src/tools/imgtool/modules/pc_hard.cpp
index 8244441aa65..57f1f5ad52d 100644
--- a/src/tools/imgtool/modules/pc_hard.cpp
+++ b/src/tools/imgtool/modules/pc_hard.cpp
@@ -55,7 +55,7 @@
#define FAT_SECLEN 512
-static OPTION_GUIDE_START( pc_chd_create_optionguide )
+OPTION_GUIDE_START( pc_chd_create_optionguide )
OPTION_INT('T', "cylinders", "Cylinders" )
OPTION_INT('H', "heads", "Heads" )
OPTION_INT('S', "sectors", "Sectors" )
diff --git a/src/tools/imgtool/modules/psion.cpp b/src/tools/imgtool/modules/psion.cpp
index c0f35f57b2e..3fcd398d30e 100644
--- a/src/tools/imgtool/modules/psion.cpp
+++ b/src/tools/imgtool/modules/psion.cpp
@@ -626,7 +626,7 @@ static imgtoolerr_t datapack_delete_file( imgtool_partition *partition, const ch
return IMGTOOLERR_FILENOTFOUND;
}
-static OPTION_GUIDE_START( psion_create_optguide )
+OPTION_GUIDE_START( psion_create_optguide )
OPTION_ENUM_START( 'S', "size", "datapack size" )
OPTION_ENUM( 1, "8k", "8 kbyte" )
OPTION_ENUM( 2, "16k", "16 kbyts" )
@@ -641,7 +641,7 @@ static OPTION_GUIDE_START( psion_create_optguide )
OPTION_INT('C', "copy", "copyable datapack" )
OPTION_GUIDE_END
-static OPTION_GUIDE_START( psion_write_optguide )
+OPTION_GUIDE_START( psion_write_optguide )
OPTION_ENUM_START( 'T', "type", "file type" )
OPTION_ENUM( 1, "OB3", "OB3 files" )
OPTION_ENUM( 2, "OPL", "OPL files" )
diff --git a/src/tools/imgtool/modules/rsdos.cpp b/src/tools/imgtool/modules/rsdos.cpp
index 79ccfd0c6da..823e3d98339 100644
--- a/src/tools/imgtool/modules/rsdos.cpp
+++ b/src/tools/imgtool/modules/rsdos.cpp
@@ -579,7 +579,7 @@ static imgtoolerr_t rsdos_diskimage_suggesttransfer(imgtool_partition *partition
Imgtool module declaration
*********************************************************************/
-static OPTION_GUIDE_START( coco_rsdos_writefile_optionguide )
+OPTION_GUIDE_START( coco_rsdos_writefile_optionguide )
OPTION_ENUM_START( RSDOS_OPTIONS_FTYPE, "ftype", "File type" )
OPTION_ENUM( 0, "basic", "Basic" )
OPTION_ENUM( 1, "data", "Data" )
diff --git a/src/tools/imgtool/modules/thomson.cpp b/src/tools/imgtool/modules/thomson.cpp
index 9ae04b0de4e..ecd475add86 100644
--- a/src/tools/imgtool/modules/thomson.cpp
+++ b/src/tools/imgtool/modules/thomson.cpp
@@ -1519,7 +1519,7 @@ FILTER( thombas128,
/************************* driver ***************************/
-static OPTION_GUIDE_START( thom_createimage_optguide )
+OPTION_GUIDE_START( thom_createimage_optguide )
OPTION_INT( 'H', "heads", "Heads" )
OPTION_INT( 'T', "tracks", "Tracks" )
OPTION_ENUM_START( 'D', "density", "Density" )
@@ -1529,7 +1529,7 @@ static OPTION_GUIDE_START( thom_createimage_optguide )
OPTION_STRING( 'N', "name", "Floppy name" )
OPTION_GUIDE_END
-static OPTION_GUIDE_START( thom_writefile_optguide )
+OPTION_GUIDE_START( thom_writefile_optguide )
OPTION_ENUM_START( 'T', "ftype", "File type" )
OPTION_ENUM( 0, "auto", "Automatic (by extension)" )
OPTION_ENUM( 1, "B", "Program" )
diff --git a/src/tools/imgtool/modules/ti99.cpp b/src/tools/imgtool/modules/ti99.cpp
index d1d18eb1acc..57b58ea75b1 100644
--- a/src/tools/imgtool/modules/ti99.cpp
+++ b/src/tools/imgtool/modules/ti99.cpp
@@ -3877,7 +3877,7 @@ enum
dsk_createopts_density = 'F'
};
-static OPTION_GUIDE_START( dsk_create_optionguide )
+OPTION_GUIDE_START( dsk_create_optionguide )
OPTION_STRING(dsk_createopts_volname, "label", "Volume name" )
OPTION_INT(dsk_createopts_sides, "sides", "Sides" )
OPTION_INT(dsk_createopts_tracks, "tracks", "Tracks" )
diff --git a/src/tools/imgtool/modules/ti990hd.cpp b/src/tools/imgtool/modules/ti990hd.cpp
index 07987802cc5..195606e720a 100644
--- a/src/tools/imgtool/modules/ti990hd.cpp
+++ b/src/tools/imgtool/modules/ti990hd.cpp
@@ -409,7 +409,7 @@ enum
ti990_createopts_sectorsize = 'E'
};
-static OPTION_GUIDE_START( ti990_create_optionguide )
+OPTION_GUIDE_START( ti990_create_optionguide )
/*OPTION_STRING(ti990_createopts_volname, "label", "Volume name" )*/
OPTION_INT(ti990_createopts_cylinders, "cylinders", "Cylinders" )
OPTION_INT(ti990_createopts_heads, "heads", "Heads" )
diff --git a/src/tools/imgtool/modules/vzdos.cpp b/src/tools/imgtool/modules/vzdos.cpp
index 7d06ffc552c..db0d056e10d 100644
--- a/src/tools/imgtool/modules/vzdos.cpp
+++ b/src/tools/imgtool/modules/vzdos.cpp
@@ -903,7 +903,7 @@ void filter_vzsnapshot_getinfo(UINT32 state, union filterinfo *info)
Imgtool module declaration
*********************************************************************/
-static OPTION_GUIDE_START(vzdos_writefile_optionguide)
+OPTION_GUIDE_START(vzdos_writefile_optionguide)
OPTION_ENUM_START( 'T', "ftype", "File type" )
OPTION_ENUM( 0, "basic", "Basic" )
OPTION_ENUM( 1, "binary", "Binary" )