the humble beginnings of a command system
This commit is contained in:
		@@ -1,4 +1,4 @@
 | 
				
			|||||||
bin_PROGRAMS = cellar
 | 
					bin_PROGRAMS = cellar
 | 
				
			||||||
cellar_CPPFLAGS = $(BOOST_CPPFLAGS)
 | 
					cellar_CPPFLAGS = $(BOOST_CPPFLAGS)
 | 
				
			||||||
cellar_LDFLAGS = $(BOOST_LDFLAGS) $(BOOST_SYSTEM_LIB) $(BOOST_FILESYSTEM_LIB)
 | 
					cellar_LDFLAGS = $(BOOST_LDFLAGS) $(BOOST_SYSTEM_LIB) $(BOOST_FILESYSTEM_LIB)
 | 
				
			||||||
cellar_SOURCES = cellar.cpp fs.cpp bottles.cpp
 | 
					cellar_SOURCES = cellar.cpp fs.cpp bottles.cpp commands.cpp
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,34 +6,17 @@
 | 
				
			|||||||
#include "json.hpp"
 | 
					#include "json.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "bottles.hpp"
 | 
					#include "bottles.hpp"
 | 
				
			||||||
 | 
					#include "commands.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
using namespace std;
 | 
					using namespace std;
 | 
				
			||||||
using namespace cellar;
 | 
					using namespace cellar;
 | 
				
			||||||
using json = nlohmann::json;
 | 
					using json = nlohmann::json;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main(int argc, char* argv[]) {
 | 
					int main(int argc, char* argv[]) {
 | 
				
			||||||
	map<string, bottles::Bottle> bottles = bottles::get_bottles();
 | 
					    vector<string> commands = commands::list_commands();
 | 
				
			||||||
	for (auto& item : bottles) {
 | 
					    cout << "cellar - bottle management tool for WINE connoisseurs" << std::endl;
 | 
				
			||||||
        cout << item.first << "- ";
 | 
					    for (string item : commands) {
 | 
				
			||||||
        bottles::Bottle current = item.second;
 | 
					        cout << item << " has loaded" << endl;
 | 
				
			||||||
 | 
					 | 
				
			||||||
        switch (current.type) {
 | 
					 | 
				
			||||||
            case bottles::bottle_anonymous:
 | 
					 | 
				
			||||||
                cout << "anonymous wine bottle";
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case bottles::bottle_labelled:
 | 
					 | 
				
			||||||
                cout << current.config["name"];
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case bottles::bottle_symlink:
 | 
					 | 
				
			||||||
                cout << "symlink to ";
 | 
					 | 
				
			||||||
                cout << current.canonical_path;
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            default:
 | 
					 | 
				
			||||||
                cout << "broken or unsupported wine bottle";
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        cout << endl;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										19
									
								
								src/commands.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/commands.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					#include "commands.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using namespace std;
 | 
				
			||||||
 | 
					using namespace cellar::commands;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					map<string, CommandFunction> cellar::commands::command_map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool cellar::commands::add_command(string name, CommandFunction func) {
 | 
				
			||||||
 | 
					    command_map[name] = func;
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					vector<string> cellar::commands::list_commands() {
 | 
				
			||||||
 | 
					    vector<string> result;
 | 
				
			||||||
 | 
					    for (auto& item : command_map) {
 | 
				
			||||||
 | 
					        result.push_back(item.first);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return result;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										20
									
								
								src/commands.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/commands.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					#ifndef __COMMANDS_HPP
 | 
				
			||||||
 | 
					#define __COMMANDS_HPP
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <map>
 | 
				
			||||||
 | 
					#include <string>
 | 
				
			||||||
 | 
					#include <vector>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using namespace std;
 | 
				
			||||||
 | 
					namespace cellar {
 | 
				
			||||||
 | 
					    namespace commands {
 | 
				
			||||||
 | 
					        typedef void (*CommandFunction)(int, char*[]);
 | 
				
			||||||
 | 
					        extern map<string, CommandFunction> command_map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        bool add_command(string, CommandFunction);
 | 
				
			||||||
 | 
					        vector<string> list_commands();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // __COMMANDS_HPP
 | 
				
			||||||
		Reference in New Issue
	
	Block a user