summaryrefslogtreecommitdiff
path: root/Source/Applications/Shell
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Applications/Shell')
-rwxr-xr-xSource/Applications/Shell/Applets/rot13bin0 -> 73404 bytes
-rw-r--r--Source/Applications/Shell/Applets/rot13.cpp30
-rw-r--r--Source/Applications/Shell/Makefile8
-rw-r--r--Source/Applications/Shell/Shell-fs.class.cpp4
-rw-r--r--Source/Applications/Shell/Shell.class.cpp5
-rw-r--r--Source/Applications/Shell/main.cpp5
6 files changed, 42 insertions, 10 deletions
diff --git a/Source/Applications/Shell/Applets/rot13 b/Source/Applications/Shell/Applets/rot13
new file mode 100755
index 0000000..0399a6f
--- /dev/null
+++ b/Source/Applications/Shell/Applets/rot13
Binary files differ
diff --git a/Source/Applications/Shell/Applets/rot13.cpp b/Source/Applications/Shell/Applets/rot13.cpp
new file mode 100644
index 0000000..e5638b8
--- /dev/null
+++ b/Source/Applications/Shell/Applets/rot13.cpp
@@ -0,0 +1,30 @@
+#include <App/StreamApp.proto.h>
+
+class rot13 : public StreamApp {
+ public:
+ rot13() : StreamApp("rot13", "Cat a file, but ROT13 it") {}
+ int run();
+};
+
+APP(rot13);
+
+int rot13::run() {
+ while (!in->eof()) {
+ String s = in->get();
+ if (in->eof() && s.empty()) break;
+ for (u32int i = 0; i < s.size(); i++) {
+ WChar &c = s[i];
+ if (c >= WChar('A') and c <= WChar('Z')) {
+ c += 13;
+ if (c > WChar('Z')) c -= 26;
+ }
+ if (c >= WChar('a') and c <= WChar('z')) {
+ c += 13;
+ if (c > WChar('z')) c -= 26;
+ }
+ }
+ *out << s << ENDL;
+ }
+ return 0;
+}
+
diff --git a/Source/Applications/Shell/Makefile b/Source/Applications/Shell/Makefile
index d546a15..e972dfb 100644
--- a/Source/Applications/Shell/Makefile
+++ b/Source/Applications/Shell/Makefile
@@ -10,7 +10,9 @@ Objects = Shell.class.o \
Shell-fs.class.o
OutFile = Shell
-all: $(OutFile)
+Applets = Applets/rot13
+
+all: $(OutFile) $(Applets)
echo "* Done with $(OutFile)."
rebuild: mrproper all
@@ -19,6 +21,10 @@ $(OutFile): $(Objects)
echo "* Linking $@..."
$(LD) $(LDFLAGS) $^ -o $@
+Applets/%: Applets/%.o
+ echo "* Linking $@..."
+ $(LD) $(LDFLAGS) $^ -o $@ -Map $@.map
+
%.o: %.cpp
echo "* Compiling $<..."
$(CXX) $(CXXFLAGS) -c $< -o $@
diff --git a/Source/Applications/Shell/Shell-fs.class.cpp b/Source/Applications/Shell/Shell-fs.class.cpp
index 150b877..30faaf7 100644
--- a/Source/Applications/Shell/Shell-fs.class.cpp
+++ b/Source/Applications/Shell/Shell-fs.class.cpp
@@ -28,11 +28,11 @@ void Shell::ls(Vector<String>& args) {
if (((p >> i) & 1) == 0) perm[8 - i] = "-";
}
if (n.type() == NT_FILE) {
- outvt << " FILE " << perm << " " << n.getName();
+ outvt << " FILE " << perm << " " << n.getName() << FLUSH;
outvt.setCsrCol(30);
outvt << (s32int)n.getLength() << " bytes.\n";
} else if (n.type() == NT_DIRECTORY) {
- outvt << " DIR " << perm << " " << n.getName() << "/";
+ outvt << " DIR " << perm << " " << n.getName() << "/" << FLUSH;
outvt.setCsrCol(30);
outvt << (s32int)n.getLength() << " items.\n";
}
diff --git a/Source/Applications/Shell/Shell.class.cpp b/Source/Applications/Shell/Shell.class.cpp
index 3d406c8..4283b30 100644
--- a/Source/Applications/Shell/Shell.class.cpp
+++ b/Source/Applications/Shell/Shell.class.cpp
@@ -25,8 +25,9 @@ int Shell::run() {
cwd = FS::cwdNode();
while (1) {
- outvt << "{" << cwd.getName() << "}: ";
- String s = invt.readLine();
+ outvt << "{" << cwd.getName() << "}: " << FLUSH;
+ String s = invt.get();
+ if (s.contains(EOF)) return 0;
if (s.empty()) continue;
while (s[0] == WChar(" ") or s[0] == WChar("\t")) {
s = s.substr(1, s.size() - 1);
diff --git a/Source/Applications/Shell/main.cpp b/Source/Applications/Shell/main.cpp
deleted file mode 100644
index 66c4269..0000000
--- a/Source/Applications/Shell/main.cpp
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "Shell.ns.h"
-
-int main(const Vector<String>& args) {
- return Shell::run();
-}