Skip to content

Commit ad39afc

Browse files
committed
Add messages to help with horizon-imp cli arg usage for #744
1 parent 512bba8 commit ad39afc

File tree

1 file changed

+45
-1
lines changed

1 file changed

+45
-1
lines changed

src/imp/imp_main.cpp

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,27 @@
2525

2626
using json = nlohmann::json;
2727

28+
#define EXPECT_FILENAME_ARG(name, i) \
29+
if (filenames.size() <= i || !Glib::file_test(filenames.at(i), Glib::FILE_TEST_EXISTS)) { \
30+
g_warning("%s filename argument at %i missing or does not exist", name, static_cast<int>(i)); \
31+
}
32+
33+
#define EXPECT_DIR_ARG(name, i) \
34+
if (filenames.size() <= i || filenames.at(i).size() == 0) { \
35+
g_warning("%s directory argument at %i missing", name, static_cast<int>(i)); \
36+
}
37+
38+
#define EXPECT_POOL_ENV() \
39+
if (pool_base_path.length() <= 0) { \
40+
g_warning("HORIZON_POOL dir env var is not set"); \
41+
} \
42+
else if (!Glib::file_test(pool_base_path, Glib::FILE_TEST_EXISTS)) { \
43+
g_warning("HORIZON_POOL dir does not exist"); \
44+
} \
45+
else if (!Glib::file_test(Glib::build_filename(pool_base_path, "pool.json"), Glib::FILE_TEST_EXISTS)) { \
46+
g_warning("HORIZON_POOL dir does not contain pool.json"); \
47+
}
48+
2849
int main(int argc, char *argv[])
2950
{
3051
#ifdef G_OS_WIN32
@@ -38,6 +59,7 @@ int main(int argc, char *argv[])
3859

3960
Glib::OptionContext options;
4061
options.set_summary("horizon interactive manipulator");
62+
options.set_description("The 'HORIZON_POOL' env var should be set directory of the pool being used.");
4163
options.set_help_enabled();
4264

4365
Glib::OptionGroup group("imp", "imp");
@@ -123,41 +145,59 @@ int main(int argc, char *argv[])
123145
horizon::setup_locale();
124146

125147
horizon::create_cache_and_config_dir();
126-
127148
std::unique_ptr<horizon::ImpBase> imp = nullptr;
128149
if (mode_sch) {
150+
EXPECT_FILENAME_ARG("blocks", 0)
151+
EXPECT_DIR_ARG("pictures", 1)
152+
EXPECT_POOL_ENV()
129153
imp.reset(new horizon::ImpSchematic(filenames, {pool_base_path}));
130154
}
131155
else if (mode_symbol) {
156+
EXPECT_FILENAME_ARG("symbol", 0)
157+
EXPECT_POOL_ENV()
132158
imp.reset(new horizon::ImpSymbol(filenames.at(0), pool_base_path, temp_mode));
133159
if (filenames.size() > 1)
134160
imp->set_suggested_filename(filenames.at(1));
135161
}
136162
else if (mode_padstack) {
163+
EXPECT_FILENAME_ARG("padstack", 0)
164+
EXPECT_POOL_ENV()
137165
imp.reset(new horizon::ImpPadstack(filenames.at(0), pool_base_path, temp_mode));
138166
if (filenames.size() > 1)
139167
imp->set_suggested_filename(filenames.at(1));
140168
}
141169
else if (mode_package) {
170+
EXPECT_FILENAME_ARG("package", 0)
171+
EXPECT_POOL_ENV()
142172
imp.reset(new horizon::ImpPackage(filenames.at(0), pool_base_path, temp_mode));
143173
if (filenames.size() > 1)
144174
imp->set_suggested_filename(filenames.at(1));
145175
}
146176
else if (mode_board) {
177+
EXPECT_FILENAME_ARG("board", 0)
178+
EXPECT_FILENAME_ARG("planes", 1)
179+
EXPECT_FILENAME_ARG("blocks", 2)
180+
EXPECT_DIR_ARG("pictures", 3)
181+
EXPECT_POOL_ENV()
147182
imp.reset(new horizon::ImpBoard(filenames, {pool_base_path}));
148183
}
149184
else if (mode_frame) {
185+
EXPECT_FILENAME_ARG("frame", 0)
186+
EXPECT_POOL_ENV()
150187
imp.reset(new horizon::ImpFrame(filenames.at(0), pool_base_path, temp_mode));
151188
if (filenames.size() > 1)
152189
imp->set_suggested_filename(filenames.at(1));
153190
}
154191
else if (mode_decal) {
192+
EXPECT_FILENAME_ARG("decal", 0)
193+
EXPECT_POOL_ENV()
155194
imp.reset(new horizon::ImpDecal(filenames.at(0), pool_base_path, temp_mode));
156195
if (filenames.size() > 1)
157196
imp->set_suggested_filename(filenames.at(1));
158197
}
159198
else {
160199
std::cout << "wrong invocation" << std::endl;
200+
std::cout << options.get_help().c_str();
161201
return 1;
162202
}
163203
imp->set_read_only(read_only);
@@ -167,3 +207,7 @@ int main(int argc, char *argv[])
167207

168208
return 0;
169209
}
210+
211+
#undef EXPECT_FILENAME_ARG
212+
#undef EXPECT_DIR_ARG
213+
#undef EXPECT_POOL_ENV

0 commit comments

Comments
 (0)