about summary refs log tree commit diff stats
path: root/cpp/001help.cc
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/001help.cc')
-rw-r--r--cpp/001help.cc44
1 files changed, 44 insertions, 0 deletions
diff --git a/cpp/001help.cc b/cpp/001help.cc
new file mode 100644
index 00000000..2c48d297
--- /dev/null
+++ b/cpp/001help.cc
@@ -0,0 +1,44 @@
+//: Everything this project/binary supports.
+//: This should give you a sense for what to look forward to in later layers.
+
+:(before "End Commandline Parsing")
+if (argc <= 1 || is_equal(argv[1], "--help")) {
+  // this is the functionality later layers will provide
+  // currently no automated tests for commandline arg parsing
+  cerr << "To load files and run 'main':\n"
+       << "  mu file1.mu file2.mu ...\n"
+       << "To run all tests:\n"
+       << "  mu test\n"
+       << "To load files and then run all tests:\n"
+       << "  mu test file1.mu file2.mu ...\n"
+       ;
+  return 0;
+}
+
+//:: Helper function used by the above fragment of code (and later layers too,
+//:: who knows?).
+//: The :(code) directive appends function definitions to the end of the
+//: project. Regardless of where functions are defined, we can call them
+//: anywhere we like as long as we format the function header in a specific
+//: way: put it all on a single line without indent, end the line with ') {'
+//: and no trailing whitespace. As long as functions uniformly start this
+//: way, our makefile contains a little command to automatically generate
+//: declarations for them.
+:(code)
+bool is_equal(char* s, const char* lit) {
+  return strncmp(s, lit, strlen(lit)) == 0;
+}
+
+:(before "End Includes")
+#include<iostream>
+using std::istream;
+using std::ostream;
+using std::iostream;
+using std::cin;
+using std::cout;
+using std::cerr;
+
+#include<cstring>
+#include<string>
+using std::string;
+const size_t NOT_FOUND = string::npos;