mirror of
				https://github.com/davidgiven/fluxengine.git
				synced 2025-10-24 11:11:02 -07:00 
			
		
		
		
	Config files are now specified with -c, rather than via filename
arguments, because otherwise you get really unhelpful error messages when you get things wrong.
This commit is contained in:
		
							
								
								
									
										18
									
								
								build.py
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								build.py
									
									
									
									
									
								
							| @@ -28,7 +28,7 @@ else: | |||||||
|         ("acorndfs", "", "--200"), |         ("acorndfs", "", "--200"), | ||||||
|         ("agat", "", ""), |         ("agat", "", ""), | ||||||
|         ("amiga", "", ""), |         ("amiga", "", ""), | ||||||
|         ("apple2", "", "--140 40track_drive"), |         ("apple2", "", "--140 -c 40track_drive"), | ||||||
|         ("atarist", "", "--360"), |         ("atarist", "", "--360"), | ||||||
|         ("atarist", "", "--370"), |         ("atarist", "", "--370"), | ||||||
|         ("atarist", "", "--400"), |         ("atarist", "", "--400"), | ||||||
| @@ -38,17 +38,17 @@ else: | |||||||
|         ("atarist", "", "--800"), |         ("atarist", "", "--800"), | ||||||
|         ("atarist", "", "--820"), |         ("atarist", "", "--820"), | ||||||
|         ("bk", "", ""), |         ("bk", "", ""), | ||||||
|         ("brother", "", "--120 40track_drive"), |         ("brother", "", "--120 -c 40track_drive"), | ||||||
|         ("brother", "", "--240"), |         ("brother", "", "--240"), | ||||||
|         ( |         ( | ||||||
|             "commodore", |             "commodore", | ||||||
|             "scripts/commodore1541_test.textpb", |             "scripts/commodore1541_test.textpb", | ||||||
|             "--171 40track_drive", |             "--171 -c 40track_drive", | ||||||
|         ), |         ), | ||||||
|         ( |         ( | ||||||
|             "commodore", |             "commodore", | ||||||
|             "scripts/commodore1541_test.textpb", |             "scripts/commodore1541_test.textpb", | ||||||
|             "--192 40track_drive", |             "--192 -c 40track_drive", | ||||||
|         ), |         ), | ||||||
|         ("commodore", "", "--800"), |         ("commodore", "", "--800"), | ||||||
|         ("commodore", "", "--1620"), |         ("commodore", "", "--1620"), | ||||||
| @@ -60,17 +60,17 @@ else: | |||||||
|         ("ibm", "", "--1232"), |         ("ibm", "", "--1232"), | ||||||
|         ("ibm", "", "--1440"), |         ("ibm", "", "--1440"), | ||||||
|         ("ibm", "", "--1680"), |         ("ibm", "", "--1680"), | ||||||
|         ("ibm", "", "--180 40track_drive"), |         ("ibm", "", "--180 -c 40track_drive"), | ||||||
|         ("ibm", "", "--160 40track_drive"), |         ("ibm", "", "--160 -c 40track_drive"), | ||||||
|         ("ibm", "", "--320 40track_drive"), |         ("ibm", "", "--320 -c 40track_drive"), | ||||||
|         ("ibm", "", "--360 40track_drive"), |         ("ibm", "", "--360 -c 40track_drive"), | ||||||
|         ("ibm", "", "--720_96"), |         ("ibm", "", "--720_96"), | ||||||
|         ("ibm", "", "--720_135"), |         ("ibm", "", "--720_135"), | ||||||
|         ("mac", "scripts/mac400_test.textpb", "--400"), |         ("mac", "scripts/mac400_test.textpb", "--400"), | ||||||
|         ("mac", "scripts/mac800_test.textpb", "--800"), |         ("mac", "scripts/mac800_test.textpb", "--800"), | ||||||
|         ("n88basic", "", ""), |         ("n88basic", "", ""), | ||||||
|         ("rx50", "", ""), |         ("rx50", "", ""), | ||||||
|         ("tartu", "", "--390 40track_drive"), |         ("tartu", "", "--390 -c 40track_drive"), | ||||||
|         ("tartu", "", "--780"), |         ("tartu", "", "--780"), | ||||||
|         ("tids990", "", ""), |         ("tids990", "", ""), | ||||||
|         ("victor9k", "", "--612"), |         ("victor9k", "", "--612"), | ||||||
|   | |||||||
| @@ -13,17 +13,23 @@ static std::vector<Flag*> all_flags; | |||||||
| static std::map<const std::string, Flag*> flags_by_name; | static std::map<const std::string, Flag*> flags_by_name; | ||||||
|  |  | ||||||
| static void doHelp(); | static void doHelp(); | ||||||
|  | static void doLoadConfig(const std::string& filename); | ||||||
| static void doShowConfig(); | static void doShowConfig(); | ||||||
| static void doDoc(); | static void doDoc(); | ||||||
|  |  | ||||||
| static FlagGroup helpGroup; | static FlagGroup helpGroup; | ||||||
| static ActionFlag helpFlag = ActionFlag({"--help"}, "Shows the help.", doHelp); | static ActionFlag helpFlag = ActionFlag({"--help"}, "Shows the help.", doHelp); | ||||||
|  |  | ||||||
| static ActionFlag showConfigFlag = ActionFlag({"--config", "-C"}, | static FlagGroup configGroup; | ||||||
|  | static ActionFlag loadConfigFlag({"--config", "-c"}, | ||||||
|  |     "Reads an internal or external configuration file.", | ||||||
|  |     doLoadConfig); | ||||||
|  |  | ||||||
|  | static ActionFlag showConfigFlag({"--show-config", "-C"}, | ||||||
|     "Shows the currently set configuration and halts.", |     "Shows the currently set configuration and halts.", | ||||||
|     doShowConfig); |     doShowConfig); | ||||||
|  |  | ||||||
| static ActionFlag docFlag = ActionFlag( | static ActionFlag docFlag( | ||||||
|     {"--doc"}, "Shows the available configuration options and halts.", doDoc); |     {"--doc"}, "Shows the available configuration options and halts.", doDoc); | ||||||
|  |  | ||||||
| FlagGroup::FlagGroup() | FlagGroup::FlagGroup() | ||||||
| @@ -182,17 +188,16 @@ void FlagGroup::parseFlags(int argc, | |||||||
|             "non-option parameter '{}' seen (try --help)", *filenames.begin()); |             "non-option parameter '{}' seen (try --help)", *filenames.begin()); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static void doLoadConfig(const std::string& filename) | ||||||
|  | { | ||||||
|  |     globalConfig().readBaseConfigFile(filename); | ||||||
|  | } | ||||||
|  |  | ||||||
| void FlagGroup::parseFlagsWithConfigFiles(int argc, | void FlagGroup::parseFlagsWithConfigFiles(int argc, | ||||||
|     const char* argv[], |     const char* argv[], | ||||||
|     const std::map<std::string, const ConfigProto*>& configFiles) |     const std::map<std::string, const ConfigProto*>& configFiles) | ||||||
| { | { | ||||||
|     parseFlags(argc, |     FlagGroup({this, &configGroup}).parseFlags(argc, argv); | ||||||
|         argv, |  | ||||||
|         [&](const auto& filename) |  | ||||||
|         { |  | ||||||
|             globalConfig().readBaseConfigFile(filename); |  | ||||||
|             return true; |  | ||||||
|         }); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| void FlagGroup::checkInitialised() const | void FlagGroup::checkInitialised() const | ||||||
|   | |||||||
| @@ -83,13 +83,23 @@ public: | |||||||
|         const std::string helptext, |         const std::string helptext, | ||||||
|         std::function<void(void)> callback): |         std::function<void(void)> callback): | ||||||
|         Flag(names, helptext), |         Flag(names, helptext), | ||||||
|         _callback(callback) |         _voidCallback(callback), | ||||||
|  |         _hasArgument(false) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     ActionFlag(const std::vector<std::string>& names, | ||||||
|  |         const std::string helptext, | ||||||
|  |         std::function<void(const std::string&)> callback): | ||||||
|  |         Flag(names, helptext), | ||||||
|  |         _callback(callback), | ||||||
|  |         _hasArgument(true) | ||||||
|     { |     { | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     bool hasArgument() const override |     bool hasArgument() const override | ||||||
|     { |     { | ||||||
|         return false; |         return _hasArgument; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     const std::string defaultValueAsString() const override |     const std::string defaultValueAsString() const override | ||||||
| @@ -99,11 +109,16 @@ public: | |||||||
|  |  | ||||||
|     void set(const std::string& value) override |     void set(const std::string& value) override | ||||||
|     { |     { | ||||||
|         _callback(); |         if (_hasArgument) | ||||||
|  |             _callback(value); | ||||||
|  |         else | ||||||
|  |             _voidCallback(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     const std::function<void(void)> _callback; |     const std::function<void(const std::string&)> _callback; | ||||||
|  |     const std::function<void(void)> _voidCallback; | ||||||
|  |     bool _hasArgument; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| class SettableFlag : public Flag | class SettableFlag : public Flag | ||||||
|   | |||||||
| @@ -14,10 +14,10 @@ destfile=$dir/dest.img | |||||||
|  |  | ||||||
| dd if=/dev/urandom of=$srcfile bs=1048576 count=2 2>&1 | dd if=/dev/urandom of=$srcfile bs=1048576 count=2 2>&1 | ||||||
|  |  | ||||||
| echo $fluxengine write $format -i $srcfile -d $fluxfile --drive.rotational_period_ms=200 $flags | echo $fluxengine write -c $format -i $srcfile -d $fluxfile --drive.rotational_period_ms=200 $flags | ||||||
| $fluxengine write $format -i $srcfile -d $fluxfile --drive.rotational_period_ms=200 $flags | $fluxengine write -c $format -i $srcfile -d $fluxfile --drive.rotational_period_ms=200 $flags | ||||||
| echo $fluxengine read $format -s $fluxfile -o $destfile --drive.rotational_period_ms=200 $flags | echo $fluxengine read -c $format -s $fluxfile -o $destfile --drive.rotational_period_ms=200 $flags | ||||||
| $fluxengine read $format -s $fluxfile -o $destfile --drive.rotational_period_ms=200 $flags | $fluxengine read -c $format -s $fluxfile -o $destfile --drive.rotational_period_ms=200 $flags | ||||||
| if [ ! -s $destfile ]; then | if [ ! -s $destfile ]; then | ||||||
| 	echo "Zero length output file!" >&2 | 	echo "Zero length output file!" >&2 | ||||||
| 	exit 1 | 	exit 1 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user