From 1d301e54da75b90172d129594265f2b629f3125a Mon Sep 17 00:00:00 2001 From: Alexis211 Date: Sun, 20 Dec 2009 19:39:46 +0100 Subject: rot13, demo app for StreamApp, is working :) --- CopyToFDD.sh | 7 + CopyToHDD.sh | 2 + Makefile | 1 + .../2009-12-20-193041_1032x794_scrot.png | Bin 0 -> 39390 bytes Mount/boot/menu.cfg | 27 + Mount/boot/stage1 | Bin 0 -> 512 bytes Mount/boot/stage2 | Bin 0 -> 99882 bytes Source/Applications/Shell/Applets/rot13 | Bin 0 -> 73404 bytes Source/Applications/Shell/Applets/rot13.cpp | 30 + Source/Applications/Shell/Applets/rot13.map | 1371 ++++++++++++++++++++ Source/Applications/Shell/Makefile | 8 +- Source/Applications/Shell/Shell.class.cpp | 1 + Source/Kernel/TaskManager/Thread.class.cpp | 6 +- Source/Library/Common/FileStream.class.cpp | 11 +- Source/Library/Common/IStream.proto.cpp | 5 +- Source/Library/Common/OStream.proto.cpp | 4 +- Source/Library/Userland/App/ShellApp.proto.cpp | 5 +- Source/Library/Userland/App/StreamApp.proto.cpp | 5 +- .../Userland/Binding/VirtualTerminal.class.h | 1 + 19 files changed, 1471 insertions(+), 13 deletions(-) create mode 100644 Media/Screenshots/2009-12-20-193041_1032x794_scrot.png create mode 100755 Mount/boot/menu.cfg create mode 100755 Mount/boot/stage1 create mode 100755 Mount/boot/stage2 create mode 100755 Source/Applications/Shell/Applets/rot13 create mode 100644 Source/Applications/Shell/Applets/rot13.cpp create mode 100644 Source/Applications/Shell/Applets/rot13.map diff --git a/CopyToFDD.sh b/CopyToFDD.sh index 5fe9508..9c5a4ed 100755 --- a/CopyToFDD.sh +++ b/CopyToFDD.sh @@ -5,6 +5,13 @@ # Update GRUB's menu.cfg cp Grub-menu-fdd.cfg Mount/boot/menu.cfg +# Cleanup old stuff +cd Mount +for a in `ls`; do + if [ $a != boot ]; then rm -rf $a; fi +done +cd .. + # Create directories mkdir Mount/{System,Applications,Volumes} mkdir Mount/Applications/{Shell,Demos} diff --git a/CopyToHDD.sh b/CopyToHDD.sh index d901b1b..7a0890e 100755 --- a/CopyToHDD.sh +++ b/CopyToHDD.sh @@ -9,6 +9,7 @@ cp Grub-menu-hdd.cfg Mount/grub/menu.lst mkdir Mount/{System,Applications,Volumes} mkdir Mount/System/{Applications,Configuration,Logs,Keymaps} mkdir Mount/Applications/{Demos,Shell} +mkdir Mount/Applications/Shell/Applets mkdir Mount/Volumes/{Floppy,InitRFS} # Copy welcome text @@ -23,6 +24,7 @@ cp Source/Kernel/Ressources/Configuration/* Mount/System/Configuration cp Source/Kernel/Ressources/Keymaps/*.mkm Mount/System/Keymaps cp Source/Applications/PaperWork/PaperWork Mount/System/Applications/PaperWork.app cp Source/Applications/Shell/Shell Mount/Applications/Shell/Shell.app +cp Source/Applications/Shell/Applets/rot13 Mount/Applications/Shell/Applets cp Source/Applications/Shell/Help.txt Mount/Applications/Shell # Create mount configuration file diff --git a/Makefile b/Makefile index 58bdf13..ce24c45 100644 --- a/Makefile +++ b/Makefile @@ -16,6 +16,7 @@ RamFSFiles = :/System :/System/Applications :/System/Configuration :/System/Keym Source/Applications/Shell/Shell:/Applications/Shell/Shell.app \ Source/Applications/Shell/Help.txt:/Applications/Shell/Help.txt \ Source/Applications/PaperWork/PaperWork:/System/Applications/PaperWork.app \ + Source/Applications/Shell/Applets/rot13:/rot13 \ :/Useless \ Source/Kernel/Ressources/Graphics/logo.text.cxd:/Useless/Melon-logo diff --git a/Media/Screenshots/2009-12-20-193041_1032x794_scrot.png b/Media/Screenshots/2009-12-20-193041_1032x794_scrot.png new file mode 100644 index 0000000..069ba9e Binary files /dev/null and b/Media/Screenshots/2009-12-20-193041_1032x794_scrot.png differ diff --git a/Mount/boot/menu.cfg b/Mount/boot/menu.cfg new file mode 100755 index 0000000..37bcfb0 --- /dev/null +++ b/Mount/boot/menu.cfg @@ -0,0 +1,27 @@ +default 2 + +title The Melon Operating System +root (fd0) +kernel /System/Melon.ke root:block.floppy:0:0 +module /System/Init.rfs + +title Melon without VESA +root (fd0) +kernel /System/Melon.ke vesa:disabled root:block.floppy:0:0 +module /System/Init.rfs + +title Melon without init +root (fd0) +kernel /System/Melon.ke init: root:block.floppy:0:0 +module /System/Init.rfs + +title Melon without init, boot on initramfs +root (fd0) +kernel /System/Melon.ke init: root:ramfs:0 +module /System/Init.rfs + +title Game of life simulator +root (fd0) +kernel /System/Melon.ke init:/Applications/Demos/GOL.app root:block.floppy:0:0 +module /System/Init.rfs + diff --git a/Mount/boot/stage1 b/Mount/boot/stage1 new file mode 100755 index 0000000..c10df80 Binary files /dev/null and b/Mount/boot/stage1 differ diff --git a/Mount/boot/stage2 b/Mount/boot/stage2 new file mode 100755 index 0000000..8b578cf Binary files /dev/null and b/Mount/boot/stage2 differ diff --git a/Source/Applications/Shell/Applets/rot13 b/Source/Applications/Shell/Applets/rot13 new file mode 100755 index 0000000..5ec705f Binary files /dev/null and b/Source/Applications/Shell/Applets/rot13 differ diff --git a/Source/Applications/Shell/Applets/rot13.cpp b/Source/Applications/Shell/Applets/rot13.cpp new file mode 100644 index 0000000..79c2124 --- /dev/null +++ b/Source/Applications/Shell/Applets/rot13.cpp @@ -0,0 +1,30 @@ +#include + +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(); + 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; + } + } + if (in->eof() && s.empty()) break; + *out << s << ENDL; + } + return 0; +} + diff --git a/Source/Applications/Shell/Applets/rot13.map b/Source/Applications/Shell/Applets/rot13.map new file mode 100644 index 0000000..10461ef --- /dev/null +++ b/Source/Applications/Shell/Applets/rot13.map @@ -0,0 +1,1371 @@ + +Discarded input sections + + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 ../../Library/Melon.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .group 0x00000000 0x8 Applets/rot13.o + .text._ZdlPv 0x00000000 0x13 Applets/rot13.o + .text._ZN5WChareqEj + 0x00000000 0x10 Applets/rot13.o + .text._ZNK5WCharcvjEv + 0x00000000 0xa Applets/rot13.o + .text._ZN6StringD1Ev + 0x00000000 0x30 Applets/rot13.o + .text._ZN6StringD0Ev + 0x00000000 0x30 Applets/rot13.o + .text._ZN7OStreamlsERK6String + 0x00000000 0x59 Applets/rot13.o + .text._ZN11Application8doEventsEv + 0x00000000 0x5 Applets/rot13.o + .text._ZN11BasicStringI5WCharED2Ev + 0x00000000 0x3d Applets/rot13.o + .text._ZN11BasicStringI5WCharED1Ev + 0x00000000 0x3d Applets/rot13.o + .text._ZN11BasicStringI5WCharED0Ev + 0x00000000 0x3d Applets/rot13.o + .text._ZNK11BasicStringI5WCharE8containsERKS0_ + 0x00000000 0x5a Applets/rot13.o + .text._ZNK11BasicStringI5WCharE4sizeEv + 0x00000000 0xb Applets/rot13.o + .text._ZNK11BasicStringI5WCharEixEi + 0x00000000 0x13 Applets/rot13.o + .text._ZNK11BasicStringI5WCharE5emptyEv + 0x00000000 0x10 Applets/rot13.o + .rodata._ZTV6String + 0x00000000 0x10 Applets/rot13.o + .rodata._ZTV11BasicStringI5WCharE + 0x00000000 0x10 Applets/rot13.o + +Memory Configuration + +Name Origin Length Attributes +*default* 0x00000000 0xffffffff + +Linker script and memory map + +LOAD ../../Library/Melon.o + 0x10000000 . = 0x10000000 + +.text 0x10000000 0x777d + *(.text) + .text 0x10000000 0x746c ../../Library/Melon.o + 0x10000000 WChar::WChar() + 0x1000000e WChar::WChar() + 0x1000001c WChar::WChar(char) + 0x1000003e WChar::WChar(char) + 0x10000060 WChar::WChar(char const*, unsigned char) + 0x100000e6 WChar::WChar(char const*, unsigned char) + 0x1000016c WChar::ucharLen(char const*, unsigned char) + 0x10000298 WChar::utfLen(char const*, unsigned char) + 0x1000030c WChar::affectAscii(char) + 0x1000034c WChar::affectUtf8(char const*) + 0x10000514 WChar::affectUtf16be(char const*) + 0x10000684 WChar::affectUtf16le(char const*) + 0x100007f4 WChar::affectUtf32be(char const*) + 0x10000886 WChar::affectUtf32le(char const*) + 0x10000918 WChar::toAscii() + 0x10000978 WChar::toUtf8() + 0x10000a62 WChar::toUtf32be() + 0x10000a98 WChar::toUtf32le() + 0x10001894 CMem::memcpy(unsigned char*, unsigned char const*, unsigned int) + 0x1000192b CMem::memset(unsigned char*, unsigned char, int) + 0x10001962 CMem::memsetw(unsigned short*, unsigned short, int) + 0x1000199d CMem::strlen(char const*) + 0x100019cc atomic_exchange(unsigned int*, unsigned int) + 0x100019e4 Mutex::Mutex(unsigned int) + 0x100019f2 Mutex::Mutex(unsigned int) + 0x10001a00 Mutex::lock() + 0x10001a32 Mutex::waitLock() + 0x10001a7a Mutex::unlock() + 0x10001a88 Mutex::locked() + 0x10001a98 Heap::Heap() + 0x10001ae2 Heap::Heap() + 0x10001b2c Heap::~Heap() + 0x10001b32 Heap::~Heap() + 0x10001b38 Heap::create(unsigned int, unsigned int, unsigned int) + 0x10001c5e Heap::expand(unsigned int) + 0x10001d86 Heap::contract() + 0x10001ea4 Heap::alloc(unsigned int, bool) + 0x10002060 Heap::free(void*) + 0x100021fc Heap::insertIntoIndex(heap_header_t*) + 0x10002324 Heap::findIndexEntry(heap_header_t*) + 0x10002368 Heap::removeFromIndex(unsigned int) + 0x100023b6 Heap::removeFromIndex(heap_header_t*) + 0x100023ec String::hex(unsigned int) + 0x10002500 String::number(int) + 0x100026f0 String::unserialize(unsigned int) + 0x100027ae String::serialize() const + 0x10002824 String::String(char const*, unsigned char) + 0x10002874 String::String(char const*, unsigned char) + 0x100028c4 String::affect(char const*, unsigned char) + 0x100029e8 String::compare(char const*, unsigned char) const + 0x10002abe String::append(char const*, unsigned char) + 0x10002c32 String::concat(String const&) const + 0x10002c88 String::concat(char const*, unsigned char) const + 0x10002cec String::concat(WChar) const + 0x10002d42 String::toInt() const + 0x10002e44 String::toInt16() const + 0x10002f44 String::split(WChar) const + 0x1000304a String::substr(int, int) + 0x10003188 TextFile::write(String, bool) + 0x100031f6 TextFile::readLine(char) + 0x10003350 ByteArray::ByteArray(char const*) + 0x1000339c ByteArray::ByteArray(char const*) + 0x100033e8 ByteArray::affect(String const&, unsigned char) + 0x100035ea ByteArray::resize(unsigned int) + 0x100036d0 ByteArray::toString(unsigned char) + 0x10003770 Rand::rand() + 0x1000380d Rand::max() + 0x1000381c OStream::OStream() + 0x10003858 OStream::OStream() + 0x10003894 OStream::OStream(OStream const&) + 0x100038d0 OStream::OStream(OStream const&) + 0x1000390c OStream::put(String const&) + 0x100039b8 OStream::flush() + 0x10003b60 OStream::operator<<(ostream_modifiers_e) + 0x10003c18 IStream::IStream() + 0x10003c5a IStream::IStream() + 0x10003c9c IStream::IStream(IStream const&) + 0x10003cd8 IStream::IStream(IStream const&) + 0x10003d14 IStream::~IStream() + 0x10003d58 IStream::~IStream() + 0x10003d9c IStream::~IStream() + 0x10003de0 IStream::populate() + 0x10003e9a IStream::getChar() + 0x10003f92 IStream::get(WChar) + 0x100041d8 FileIStream::FileIStream(String const&, unsigned char, FSNode) + 0x1000427e FileIStream::FileIStream(String const&, unsigned char, FSNode) + 0x10004324 FileIStream::FileIStream(unsigned char, FSNode) + 0x10004374 FileIStream::FileIStream(unsigned char, FSNode) + 0x100043c4 FileIStream::~FileIStream() + 0x1000441a FileIStream::~FileIStream() + 0x10004470 FileIStream::~FileIStream() + 0x100044c6 FileIStream::appendFile(String const&) + 0x10004524 FileIStream::read() + 0x100046d6 FileOStream::FileOStream(String const&, unsigned char, unsigned char, FSNode) + 0x1000476c FileOStream::FileOStream(String const&, unsigned char, unsigned char, FSNode) + 0x10004802 FileOStream::~FileOStream() + 0x10004840 FileOStream::~FileOStream() + 0x1000487e FileOStream::~FileOStream() + 0x100048bc FileOStream::write(String const&) + 0x10004904 StringIStream::StringIStream(String const&) + 0x10004954 StringIStream::StringIStream(String const&) + 0x100049a4 StringIStream::StringIStream() + 0x100049ca StringIStream::StringIStream() + 0x100049f0 StringIStream::~StringIStream() + 0x10004a4a StringIStream::~StringIStream() + 0x10004aa4 StringIStream::~StringIStream() + 0x10004afe StringIStream::read() + 0x10004b88 StringIStream::append(String const&) + 0x10004be8 __cxa_pure_virtual + 0x10004bed __cxa_atexit + 0x10004bf7 memmove + 0x10004c1b __udivdi3 + 0x10004c61 __umoddi3 + 0x10004cb0 ShellApp::ShellApp(String const&, String const&) + 0x10004e60 ShellApp::ShellApp(String const&, String const&) + 0x10005010 ShellApp::~ShellApp() + 0x100050aa ShellApp::~ShellApp() + 0x10005144 ShellApp::~ShellApp() + 0x100051de ShellApp::init() + 0x100063bc ShellApp::getFlag(String) + 0x10006430 ShellApp::addFlag(WChar, String, String, int, String) + 0x1000653e ShellApp::sFlag(String) + 0x100065e4 ShellApp::iFlag(String) + 0x10006644 ShellApp::bFlag(String) + 0x100066a4 StreamApp::StreamApp(String const&, String const&) + 0x10006906 StreamApp::StreamApp(String const&, String const&) + 0x10006b68 StreamApp::~StreamApp() + 0x10006b98 StreamApp::~StreamApp() + 0x10006bc8 StreamApp::~StreamApp() + 0x10006bf8 StreamApp::init() + 0x100070b4 syscall(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) + 0x100070df threadFinishedSyscall(unsigned int) + 0x100070e9 breakPoint() + 0x100070ef putch(char) + 0x10007137 sleep(unsigned int) + 0x10007172 write_hex(unsigned int) + 0x100071b0 RessourceCaller::RessourceCaller(unsigned int, unsigned int) + 0x10007220 RessourceCaller::RessourceCaller(unsigned int, unsigned int) + 0x10007290 RessourceCaller::sCall(unsigned int, unsigned char, unsigned int, unsigned int, unsigned int, unsigned int) + 0x100072d6 RessourceCaller::doCall(unsigned char, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) + 0x10007338 start + 0x10007419 Mem::alloc(unsigned int) + 0x1000743d Mem::free(void*) + 0x10007459 Mem::mkXchgSpace(unsigned int) + .text 0x1000746c 0x311 Applets/rot13.o + 0x1000746c rot13::run() + +.text._ZN5WChareqEj + 0x1000777e 0x10 + .text._ZN5WChareqEj + 0x1000777e 0x10 ../../Library/Melon.o + 0x1000777e WChar::operator==(unsigned int) + +.text._ZNK5WCharcvjEv + 0x1000778e 0xa + .text._ZNK5WCharcvjEv + 0x1000778e 0xa ../../Library/Melon.o + 0x1000778e WChar::operator unsigned int() const + +.text._ZN6Thread3getEv + 0x10007798 0x5a + .text._ZN6Thread3getEv + 0x10007798 0x5a ../../Library/Melon.o + 0x10007798 Thread::get() + +.text._ZN6ThreadC1Ej + 0x100077f2 0x22 + .text._ZN6ThreadC1Ej + 0x100077f2 0x22 ../../Library/Melon.o + 0x100077f2 Thread::Thread(unsigned int) + +.text._ZN6Thread5sleepEj + 0x10007814 0x42 + .text._ZN6Thread5sleepEj + 0x10007814 0x42 ../../Library/Melon.o + 0x10007814 Thread::sleep(unsigned int) + +.text._ZN7Process3getEv + 0x10007856 0x5a + .text._ZN7Process3getEv + 0x10007856 0x5a ../../Library/Melon.o + 0x10007856 Process::get() + +.text._ZN7ProcessC1Ej + 0x100078b0 0x22 + .text._ZN7ProcessC1Ej + 0x100078b0 0x22 ../../Library/Melon.o + 0x100078b0 Process::Process(unsigned int) + +.text._ZN7Process10allocPagesEjj + 0x100078d2 0x41 + .text._ZN7Process10allocPagesEjj + 0x100078d2 0x41 ../../Library/Melon.o + 0x100078d2 Process::allocPages(unsigned int, unsigned int) + +.text._ZN7Process9freePagesEjj + 0x10007914 0x41 + .text._ZN7Process9freePagesEjj + 0x10007914 0x41 ../../Library/Melon.o + 0x10007914 Process::freePages(unsigned int, unsigned int) + +.text._ZnwjPv 0x10007955 0x8 + .text._ZnwjPv 0x10007955 0x8 ../../Library/Melon.o + 0x10007955 operator new(unsigned int, void*) + +.text._Znaj 0x1000795d 0x13 + .text._Znaj 0x1000795d 0x13 ../../Library/Melon.o + 0x1000795d operator new[](unsigned int) + +.text._ZdlPv 0x10007970 0x13 + .text._ZdlPv 0x10007970 0x13 ../../Library/Melon.o + 0x10007970 operator delete(void*) + +.text._ZdaPv 0x10007983 0x13 + .text._ZdaPv 0x10007983 0x13 ../../Library/Melon.o + 0x10007983 operator delete[](void*) + +.text._ZN5WChar6affectEPKch + 0x10007996 0xb0 + .text._ZN5WChar6affectEPKch + 0x10007996 0xb0 ../../Library/Melon.o + 0x10007996 WChar::affect(char const*, unsigned char) + +.text._ZN5WCharaSEj + 0x10007a46 0x10 + .text._ZN5WCharaSEj + 0x10007a46 0x10 ../../Library/Melon.o + 0x10007a46 WChar::operator=(unsigned int) + +.text._ZN6StringC1Ev + 0x10007a56 0x1c + .text._ZN6StringC1Ev + 0x10007a56 0x1c ../../Library/Melon.o + 0x10007a56 String::String() + +.text._ZN6StringC1ERKS_ + 0x10007a72 0x23 + .text._ZN6StringC1ERKS_ + 0x10007a72 0x23 ../../Library/Melon.o + 0x10007a72 String::String(String const&) + +.text._ZN6StringpLERKS_ + 0x10007a96 0x1d + .text._ZN6StringpLERKS_ + 0x10007a96 0x1d ../../Library/Melon.o + 0x10007a96 String::operator+=(String const&) + +.text._ZN6StringpLE5WChar + 0x10007ab4 0x1d + .text._ZN6StringpLE5WChar + 0x10007ab4 0x1d ../../Library/Melon.o + 0x10007ab4 String::operator+=(WChar) + +.text._ZN6StringD1Ev + 0x10007ad2 0x30 + .text._ZN6StringD1Ev + 0x10007ad2 0x30 ../../Library/Melon.o + 0x10007ad2 String::~String() + +.text._ZN6StringD0Ev + 0x10007b02 0x30 + .text._ZN6StringD0Ev + 0x10007b02 0x30 ../../Library/Melon.o + 0x10007b02 String::~String() + +.text._ZN11BasicStringI5WCharEC2Ev + 0x10007b32 0x22 + .text._ZN11BasicStringI5WCharEC2Ev + 0x10007b32 0x22 ../../Library/Melon.o + 0x10007b32 BasicString::BasicString() + +.text._ZN11BasicStringI5WCharED2Ev + 0x10007b54 0x3d + .text._ZN11BasicStringI5WCharED2Ev + 0x10007b54 0x3d ../../Library/Melon.o + 0x10007b54 BasicString::~BasicString() + +.text._ZN11BasicStringI5WCharED1Ev + 0x10007b92 0x3d + .text._ZN11BasicStringI5WCharED1Ev + 0x10007b92 0x3d ../../Library/Melon.o + 0x10007b92 BasicString::~BasicString() + +.text._ZN11BasicStringI5WCharED0Ev + 0x10007bd0 0x3d + .text._ZN11BasicStringI5WCharED0Ev + 0x10007bd0 0x3d ../../Library/Melon.o + 0x10007bd0 BasicString::~BasicString() + +.text._ZN11BasicStringI5WCharEC2ERKS1_ + 0x10007c0e 0x2d + .text._ZN11BasicStringI5WCharEC2ERKS1_ + 0x10007c0e 0x2d ../../Library/Melon.o + 0x10007c0e BasicString::BasicString(BasicString const&) + +.text._ZN11BasicStringI5WCharE6affectERKS1_ + 0x10007c3c 0xb8 + .text._ZN11BasicStringI5WCharE6affectERKS1_ + 0x10007c3c 0xb8 ../../Library/Melon.o + 0x10007c3c BasicString::affect(BasicString const&) + +.text._ZN11BasicStringI5WCharE6appendERKS1_ + 0x10007cf4 0x105 + .text._ZN11BasicStringI5WCharE6appendERKS1_ + 0x10007cf4 0x105 ../../Library/Melon.o + 0x10007cf4 BasicString::append(BasicString const&) + +.text._ZN11BasicStringI5WCharE6appendES0_ + 0x10007dfa 0xd2 + .text._ZN11BasicStringI5WCharE6appendES0_ + 0x10007dfa 0xd2 ../../Library/Melon.o + 0x10007dfa BasicString::append(WChar) + +.text._ZNK11BasicStringI5WCharEixEi + 0x10007ecc 0x13 + .text._ZNK11BasicStringI5WCharEixEi + 0x10007ecc 0x13 ../../Library/Melon.o + 0x10007ecc BasicString::operator[](int) const + +.text._ZN6VectorI6StringEC1Ev + 0x10007ee0 0x18 + .text._ZN6VectorI6StringEC1Ev + 0x10007ee0 0x18 ../../Library/Melon.o + 0x10007ee0 Vector::Vector() + +.text._ZN6VectorI6StringE4pushERKS0_ + 0x10007ef8 0xb8 + .text._ZN6VectorI6StringE4pushERKS0_ + 0x10007ef8 0xb8 ../../Library/Melon.o + 0x10007ef8 Vector::push(String const&) + +.text._ZNK6VectorI6StringE4backEv + 0x10007fb0 0x1f + .text._ZNK6VectorI6StringE4backEv + 0x10007fb0 0x1f ../../Library/Melon.o + 0x10007fb0 Vector::back() const + +.text._ZN15RessourceCaller5validEv + 0x10007fd0 0x10 + .text._ZN15RessourceCaller5validEv + 0x10007fd0 0x10 ../../Library/Melon.o + 0x10007fd0 RessourceCaller::valid() + +.text._ZN9ByteArrayC1Ev + 0x10007fe0 0x1c + .text._ZN9ByteArrayC1Ev + 0x10007fe0 0x1c ../../Library/Melon.o + 0x10007fe0 ByteArray::ByteArray() + +.text._ZN9ByteArrayC1ERK6Stringh + 0x10007ffc 0x3c + .text._ZN9ByteArrayC1ERK6Stringh + 0x10007ffc 0x3c ../../Library/Melon.o + 0x10007ffc ByteArray::ByteArray(String const&, unsigned char) + +.text._ZN9ByteArraycvPhEv + 0x10008038 0xb + .text._ZN9ByteArraycvPhEv + 0x10008038 0xb ../../Library/Melon.o + 0x10008038 ByteArray::operator unsigned char*() + +.text._ZN4File4readEjPh + 0x10008044 0x41 + .text._ZN4File4readEjPh + 0x10008044 0x41 ../../Library/Melon.o + 0x10008044 File::read(unsigned int, unsigned char*) + +.text._ZN4File5writeEjPh + 0x10008086 0x46 + .text._ZN4File5writeEjPh + 0x10008086 0x46 ../../Library/Melon.o + 0x10008086 File::write(unsigned int, unsigned char*) + +.text._ZN4File4readER9ByteArray + 0x100080cc 0x89 + .text._ZN4File4readER9ByteArray + 0x100080cc 0x89 ../../Library/Melon.o + 0x100080cc File::read(ByteArray&) + +.text._ZN4File5writeER9ByteArray + 0x10008156 0x51 + .text._ZN4File5writeER9ByteArray + 0x10008156 0x51 ../../Library/Melon.o + 0x10008156 File::write(ByteArray&) + +.text._ZN4File4seekEyh + 0x100081a8 0x77 + .text._ZN4File4seekEyh + 0x100081a8 0x77 ../../Library/Melon.o + 0x100081a8 File::seek(unsigned long long, unsigned char) + +.text._ZN9ByteArrayD1Ev + 0x10008220 0x30 + .text._ZN9ByteArrayD1Ev + 0x10008220 0x30 ../../Library/Melon.o + 0x10008220 ByteArray::~ByteArray() + +.text._ZN9ByteArrayD0Ev + 0x10008250 0x30 + .text._ZN9ByteArrayD0Ev + 0x10008250 0x30 ../../Library/Melon.o + 0x10008250 ByteArray::~ByteArray() + +.text._ZN11BasicStringIhEC2Ev + 0x10008280 0x22 + .text._ZN11BasicStringIhEC2Ev + 0x10008280 0x22 ../../Library/Melon.o + 0x10008280 BasicString::BasicString() + +.text._ZN11BasicStringIhED2Ev + 0x100082a2 0x3d + .text._ZN11BasicStringIhED2Ev + 0x100082a2 0x3d ../../Library/Melon.o + 0x100082a2 BasicString::~BasicString() + +.text._ZN11BasicStringIhED1Ev + 0x100082e0 0x3d + .text._ZN11BasicStringIhED1Ev + 0x100082e0 0x3d ../../Library/Melon.o + 0x100082e0 BasicString::~BasicString() + +.text._ZN11BasicStringIhED0Ev + 0x1000831e 0x3d + .text._ZN11BasicStringIhED0Ev + 0x1000831e 0x3d ../../Library/Melon.o + 0x1000831e BasicString::~BasicString() + +.text._ZNK11BasicStringIhE4sizeEv + 0x1000835c 0xb + .text._ZNK11BasicStringIhE4sizeEv + 0x1000835c 0xb ../../Library/Melon.o + 0x1000835c BasicString::size() const + +.text._ZNK11BasicStringIhEixEi + 0x10008368 0x11 + .text._ZNK11BasicStringIhEixEi + 0x10008368 0x11 ../../Library/Melon.o + 0x10008368 BasicString::operator[](int) const + +.text._ZN11BasicStringIhE5clearEv + 0x1000837a 0x34 + .text._ZN11BasicStringIhE5clearEv + 0x1000837a 0x34 ../../Library/Melon.o + 0x1000837a BasicString::clear() + +.text._ZN11BasicStringIhEpLEh + 0x100083ae 0x21 + .text._ZN11BasicStringIhEpLEh + 0x100083ae 0x21 ../../Library/Melon.o + 0x100083ae BasicString::operator+=(unsigned char) + +.text._ZN11BasicStringIhE6appendEh + 0x100083d0 0x9c + .text._ZN11BasicStringIhE6appendEh + 0x100083d0 0x9c ../../Library/Melon.o + 0x100083d0 BasicString::append(unsigned char) + +.text._ZN5WChar6encodeEh + 0x1000846c 0x7a + .text._ZN5WChar6encodeEh + 0x1000846c 0x7a ../../Library/Melon.o + 0x1000846c WChar::encode(unsigned char) + +.text._ZNK11BasicStringI5WCharE4sizeEv + 0x100084e6 0xb + .text._ZNK11BasicStringI5WCharE4sizeEv + 0x100084e6 0xb ../../Library/Melon.o + 0x100084e6 BasicString::size() const + +.text._Znwj 0x100084f1 0x13 + .text._Znwj 0x100084f1 0x13 ../../Library/Melon.o + 0x100084f1 operator new(unsigned int) + +.text._ZN6StringC1E5WCharj + 0x10008504 0x2a + .text._ZN6StringC1E5WCharj + 0x10008504 0x2a ../../Library/Melon.o + 0x10008504 String::String(WChar, unsigned int) + +.text._ZN7OStreamD1Ev + 0x1000852e 0x30 + .text._ZN7OStreamD1Ev + 0x1000852e 0x30 ../../Library/Melon.o + 0x1000852e OStream::~OStream() + +.text._ZN7OStreamD0Ev + 0x1000855e 0x30 + .text._ZN7OStreamD0Ev + 0x1000855e 0x30 ../../Library/Melon.o + 0x1000855e OStream::~OStream() + +.text._ZN11BasicStringI5WCharEC2ES0_j + 0x1000858e 0x34 + .text._ZN11BasicStringI5WCharEC2ES0_j + 0x1000858e 0x34 ../../Library/Melon.o + 0x1000858e BasicString::BasicString(WChar, unsigned int) + +.text._ZNK11BasicStringI5WCharE5emptyEv + 0x100085c2 0x10 + .text._ZNK11BasicStringI5WCharE5emptyEv + 0x100085c2 0x10 ../../Library/Melon.o + 0x100085c2 BasicString::empty() const + +.text._ZN10SimpleListI6StringEC1ERKS0_PS1_ + 0x100085d2 0x23 + .text._ZN10SimpleListI6StringEC1ERKS0_PS1_ + 0x100085d2 0x23 ../../Library/Melon.o + 0x100085d2 SimpleList::SimpleList(String const&, SimpleList*) + +.text._ZN10SimpleListI6StringE8addAtEndERKS0_ + 0x100085f6 0x94 + .text._ZN10SimpleListI6StringE8addAtEndERKS0_ + 0x100085f6 0x94 ../../Library/Melon.o + 0x100085f6 SimpleList::addAtEnd(String const&) + +.text._ZN10SimpleListI6StringE4nextEv + 0x1000868a 0xb + .text._ZN10SimpleListI6StringE4nextEv + 0x1000868a 0xb ../../Library/Melon.o + 0x1000868a SimpleList::next() + +.text._ZN10SimpleListI6StringE1vEv + 0x10008696 0x8 + .text._ZN10SimpleListI6StringE1vEv + 0x10008696 0x8 ../../Library/Melon.o + 0x10008696 SimpleList::v() + +.text._ZN10SimpleListI6StringED1Ev + 0x1000869e 0x3c + .text._ZN10SimpleListI6StringED1Ev + 0x1000869e 0x3c ../../Library/Melon.o + 0x1000869e SimpleList::~SimpleList() + +.text._ZN11BasicStringI5WCharE6affectES0_j + 0x100086da 0xb8 + .text._ZN11BasicStringI5WCharE6affectES0_j + 0x100086da 0xb8 ../../Library/Melon.o + 0x100086da BasicString::affect(WChar, unsigned int) + +.text._ZN10SimpleListI6StringE7delThisEv + 0x10008792 0x1f + .text._ZN10SimpleListI6StringE7delThisEv + 0x10008792 0x1f ../../Library/Melon.o + 0x10008792 SimpleList::delThis() + +.text._ZN7OStreamD2Ev + 0x100087b2 0x30 + .text._ZN7OStreamD2Ev + 0x100087b2 0x30 ../../Library/Melon.o + 0x100087b2 OStream::~OStream() + +.text._ZNK15RessourceCaller5resIdEv + 0x100087e2 0xa + .text._ZNK15RessourceCaller5resIdEv + 0x100087e2 0xa ../../Library/Melon.o + 0x100087e2 RessourceCaller::resId() const + +.text._ZN4FileC1E6Stringh6FSNode + 0x100087ec 0x5f + .text._ZN4FileC1E6Stringh6FSNode + 0x100087ec 0x5f ../../Library/Melon.o + 0x100087ec File::File(String, unsigned char, FSNode) + +.text._ZN4File5closeEv + 0x1000884c 0x43 + .text._ZN4File5closeEv + 0x1000884c 0x43 ../../Library/Melon.o + 0x1000884c File::close() + +.text._ZN4File3eofEv + 0x10008890 0x48 + .text._ZN4File3eofEv + 0x10008890 0x48 ../../Library/Melon.o + 0x10008890 File::eof() + +.text._Z5doDivyjPj + 0x100088d8 0x76 + .text._Z5doDivyjPj + 0x100088d8 0x76 ../../Library/Melon.o + 0x100088d8 doDiv(unsigned long long, unsigned int, unsigned int*) + +.text._ZN6StringaSERKS_ + 0x1000894e 0x1a + .text._ZN6StringaSERKS_ + 0x1000894e 0x1a ../../Library/Melon.o + 0x1000894e String::operator=(String const&) + +.text._ZNK6StringeqEPKc + 0x10008968 0x22 + .text._ZNK6StringeqEPKc + 0x10008968 0x22 ../../Library/Melon.o + 0x10008968 String::operator==(char const*) const + +.text._ZN6StringneEPKc + 0x1000898a 0x25 + .text._ZN6StringneEPKc + 0x1000898a 0x25 ../../Library/Melon.o + 0x1000898a String::operator!=(char const*) + +.text._ZNK6StringeqERKS_ + 0x100089b0 0x1a + .text._ZNK6StringeqERKS_ + 0x100089b0 0x1a ../../Library/Melon.o + 0x100089b0 String::operator==(String const&) const + +.text._ZN6StringpLEPKc + 0x100089ca 0x22 + .text._ZN6StringpLEPKc + 0x100089ca 0x22 ../../Library/Melon.o + 0x100089ca String::operator+=(char const*) + +.text._ZNK6StringplERKS_ + 0x100089ec 0x30 + .text._ZNK6StringplERKS_ + 0x100089ec 0x30 ../../Library/Melon.o + 0x100089ec String::operator+(String const&) const + +.text._ZNK6StringplEPKc + 0x10008a1c 0x38 + .text._ZNK6StringplEPKc + 0x10008a1c 0x38 ../../Library/Melon.o + 0x10008a1c String::operator+(char const*) const + +.text._ZN7OStreamlsERK6String + 0x10008a54 0x59 + .text._ZN7OStreamlsERK6String + 0x10008a54 0x59 ../../Library/Melon.o + 0x10008a54 OStream::operator<<(String const&) + +.text._ZN7OStreamlsEi + 0x10008aae 0x3d + .text._ZN7OStreamlsEi + 0x10008aae 0x3d ../../Library/Melon.o + 0x10008aae OStream::operator<<(int) + +.text._ZN15VirtualTerminalD1Ev + 0x10008aec 0x50 + .text._ZN15VirtualTerminalD1Ev + 0x10008aec 0x50 ../../Library/Melon.o + 0x10008aec non-virtual thunk to VirtualTerminal::~VirtualTerminal() + 0x10008af4 VirtualTerminal::~VirtualTerminal() + +.text._ZN15VirtualTerminalD0Ev + 0x10008b3c 0x50 + .text._ZN15VirtualTerminalD0Ev + 0x10008b3c 0x50 ../../Library/Melon.o + 0x10008b3c non-virtual thunk to VirtualTerminal::~VirtualTerminal() + 0x10008b44 VirtualTerminal::~VirtualTerminal() + +.text._ZN15VirtualTerminal5getInEv + 0x10008b8c 0x5e + .text._ZN15VirtualTerminal5getInEv + 0x10008b8c 0x5e ../../Library/Melon.o + 0x10008b8c VirtualTerminal::getIn() + +.text._ZN15VirtualTerminal6getOutEv + 0x10008bea 0x5e + .text._ZN15VirtualTerminal6getOutEv + 0x10008bea 0x5e ../../Library/Melon.o + 0x10008bea VirtualTerminal::getOut() + +.text._ZN15VirtualTerminalC1Ej + 0x10008c48 0x58 + .text._ZN15VirtualTerminalC1Ej + 0x10008c48 0x58 ../../Library/Melon.o + 0x10008c48 VirtualTerminal::VirtualTerminal(unsigned int) + +.text._ZN15VirtualTerminal5writeERK6String + 0x10008ca0 0x45 + .text._ZN15VirtualTerminal5writeERK6String + 0x10008ca0 0x45 ../../Library/Melon.o + 0x10008ca0 VirtualTerminal::write(String const&) + +.text._ZN15VirtualTerminal4readEv + 0x10008ce6 0x1a2 + .text._ZN15VirtualTerminal4readEv + 0x10008ce6 0x1a2 ../../Library/Melon.o + 0x10008ce6 non-virtual thunk to VirtualTerminal::read() + 0x10008cee VirtualTerminal::read() + +.text._ZN7Process4argcEv + 0x10008e88 0x43 + .text._ZN7Process4argcEv + 0x10008e88 0x43 ../../Library/Melon.o + 0x10008e88 Process::argc() + +.text._ZN7Process4argvEj + 0x10008ecc 0x66 + .text._ZN7Process4argvEj + 0x10008ecc 0x66 ../../Library/Melon.o + 0x10008ecc Process::argv(unsigned int) + +.text._ZN11ApplicationC2Ev + 0x10008f32 0x22 + .text._ZN11ApplicationC2Ev + 0x10008f32 0x22 ../../Library/Melon.o + 0x10008f32 Application::Application() + +.text._ZN11ApplicationD2Ev + 0x10008f54 0x25 + .text._ZN11ApplicationD2Ev + 0x10008f54 0x25 ../../Library/Melon.o + 0x10008f54 Application::~Application() + +.text._ZN11ApplicationD1Ev + 0x10008f7a 0x25 + .text._ZN11ApplicationD1Ev + 0x10008f7a 0x25 ../../Library/Melon.o + 0x10008f7a Application::~Application() + +.text._ZN11ApplicationD0Ev + 0x10008fa0 0x25 + .text._ZN11ApplicationD0Ev + 0x10008fa0 0x25 ../../Library/Melon.o + 0x10008fa0 Application::~Application() + +.text._ZN11Application4initEv + 0x10008fc6 0x5 + .text._ZN11Application4initEv + 0x10008fc6 0x5 ../../Library/Melon.o + 0x10008fc6 Application::init() + +.text._ZN11Application8doEventsEv + 0x10008fcc 0x5 + .text._ZN11Application8doEventsEv + 0x10008fcc 0x5 ../../Library/Melon.o + 0x10008fcc Application::doEvents() + +.text._ZN11Application4exitEj + 0x10008fd2 0x35 + .text._ZN11Application4exitEj + 0x10008fd2 0x35 ../../Library/Melon.o + 0x10008fd2 Application::exit(unsigned int) + +.text._ZN6flag_tC1Ev + 0x10009008 0x3d + .text._ZN6flag_tC1Ev + 0x10009008 0x3d ../../Library/Melon.o + 0x10009008 flag_t::flag_t() + +.text._ZN6flag_tD1Ev + 0x10009046 0x32 + .text._ZN6flag_tD1Ev + 0x10009046 0x32 ../../Library/Melon.o + 0x10009046 flag_t::~flag_t() + +.text._ZNK11BasicStringI5WCharE7compareERKS1_ + 0x10009078 0x84 + .text._ZNK11BasicStringI5WCharE7compareERKS1_ + 0x10009078 0x84 ../../Library/Melon.o + 0x10009078 BasicString::compare(BasicString const&) const + +.text._ZNK11BasicStringI5WCharE8containsERKS0_ + 0x100090fc 0x5a + .text._ZNK11BasicStringI5WCharE8containsERKS0_ + 0x100090fc 0x5a ../../Library/Melon.o + 0x100090fc BasicString::contains(WChar const&) const + +.text._ZN6VectorI6StringED1Ev + 0x10009156 0x7b + .text._ZN6VectorI6StringED1Ev + 0x10009156 0x7b ../../Library/Melon.o + 0x10009156 Vector::~Vector() + +.text._ZN6VectorI6flag_tEC1Ev + 0x100091d2 0x18 + .text._ZN6VectorI6flag_tEC1Ev + 0x100091d2 0x18 ../../Library/Melon.o + 0x100091d2 Vector::Vector() + +.text._ZN6VectorI6flag_tED1Ev + 0x100091ea 0x5b + .text._ZN6VectorI6flag_tED1Ev + 0x100091ea 0x5b ../../Library/Melon.o + 0x100091ea Vector::~Vector() + +.text._ZN6VectorI6StringE5clearEv + 0x10009246 0xa4 + .text._ZN6VectorI6StringE5clearEv + 0x10009246 0xa4 ../../Library/Melon.o + 0x10009246 Vector::clear() + +.text._ZNK6VectorI6flag_tE4sizeEv + 0x100092ea 0xb + .text._ZNK6VectorI6flag_tE4sizeEv + 0x100092ea 0xb ../../Library/Melon.o + 0x100092ea Vector::size() const + +.text._ZNK6VectorI6flag_tEixEj + 0x100092f6 0x13 + .text._ZNK6VectorI6flag_tEixEj + 0x100092f6 0x13 ../../Library/Melon.o + 0x100092f6 Vector::operator[](unsigned int) const + +.text._ZN6flag_tC1ERKS_ + 0x1000930a 0x7f + .text._ZN6flag_tC1ERKS_ + 0x1000930a 0x7f ../../Library/Melon.o + 0x1000930a flag_t::flag_t(flag_t const&) + +.text._ZN6VectorI6flag_tE4pushERKS0_ + 0x1000938a 0xa4 + .text._ZN6VectorI6flag_tE4pushERKS0_ + 0x1000938a 0xa4 ../../Library/Melon.o + 0x1000938a Vector::push(flag_t const&) + +.text._ZNK6VectorI6StringE5emptyEv + 0x1000942e 0x10 + .text._ZNK6VectorI6StringE5emptyEv + 0x1000942e 0x10 ../../Library/Melon.o + 0x1000942e Vector::empty() const + +.text._ZN6FSNodeC1Ej + 0x1000943e 0x22 + .text._ZN6FSNodeC1Ej + 0x1000943e 0x22 ../../Library/Melon.o + 0x1000943e FSNode::FSNode(unsigned int) + +.text._ZN2FS7cwdNodeEv + 0x10009460 0x54 + .text._ZN2FS7cwdNodeEv + 0x10009460 0x54 ../../Library/Melon.o + 0x10009460 FS::cwdNode() + +.text._ZNK6VectorI6StringE4sizeEv + 0x100094b4 0xb + .text._ZNK6VectorI6StringE4sizeEv + 0x100094b4 0xb ../../Library/Melon.o + 0x100094b4 Vector::size() const + +.text._ZNK6VectorI6StringEixEj + 0x100094c0 0x19 + .text._ZNK6VectorI6StringEixEj + 0x100094c0 0x19 ../../Library/Melon.o + 0x100094c0 Vector::operator[](unsigned int) const + +.iplt 0x100094dc 0x0 load address 0x100094d9 + .iplt 0x00000000 0x0 ../../Library/Melon.o + +.text._ZN5WCharpLEj + 0x100094da 0x17 + .text._ZN5WCharpLEj + 0x100094da 0x17 Applets/rot13.o + 0x100094da WChar::operator+=(unsigned int) + +.text._ZN5WCharmIEj + 0x100094f2 0x17 + .text._ZN5WCharmIEj + 0x100094f2 0x17 Applets/rot13.o + 0x100094f2 WChar::operator-=(unsigned int) + +.text._ZNK7IStream3eofEv + 0x1000950a 0x26 + .text._ZNK7IStream3eofEv + 0x1000950a 0x26 Applets/rot13.o + 0x1000950a IStream::eof() const + +.text._ZN5rot13C1Ev + 0x10009530 0x76 + .text._ZN5rot13C1Ev + 0x10009530 0x76 Applets/rot13.o + 0x10009530 rot13::rot13() + +.text._ZN5rot13D1Ev + 0x100095a6 0x30 + .text._ZN5rot13D1Ev + 0x100095a6 0x30 Applets/rot13.o + 0x100095a6 rot13::~rot13() + +.text._ZN5rot13D0Ev + 0x100095d6 0x30 + .text._ZN5rot13D0Ev + 0x100095d6 0x30 Applets/rot13.o + 0x100095d6 rot13::~rot13() + +.rodata 0x1000a000 0x397 + *(.rodata) + .rodata 0x1000a000 0x376 ../../Library/Melon.o + .rodata 0x1000a376 0x21 Applets/rot13.o + +.rodata._ZTV6String + 0x1000a398 0x10 + .rodata._ZTV6String + 0x1000a398 0x10 ../../Library/Melon.o + 0x1000a398 vtable for String + +.rodata._ZTV11BasicStringI5WCharE + 0x1000a3a8 0x10 + .rodata._ZTV11BasicStringI5WCharE + 0x1000a3a8 0x10 ../../Library/Melon.o + 0x1000a3a8 vtable for BasicString + +.rodata._ZTV9ByteArray + 0x1000a3b8 0x10 + .rodata._ZTV9ByteArray + 0x1000a3b8 0x10 ../../Library/Melon.o + 0x1000a3b8 vtable for ByteArray + +.rodata._ZTV11BasicStringIhE + 0x1000a3c8 0x10 + .rodata._ZTV11BasicStringIhE + 0x1000a3c8 0x10 ../../Library/Melon.o + 0x1000a3c8 vtable for BasicString + +.rodata._ZTV7OStream + 0x1000a3d8 0x14 + .rodata._ZTV7OStream + 0x1000a3d8 0x14 ../../Library/Melon.o + 0x1000a3d8 vtable for OStream + +.rodata._ZTV7IStream + 0x1000a3f0 0x14 + .rodata._ZTV7IStream + 0x1000a3f0 0x14 ../../Library/Melon.o + 0x1000a3f0 vtable for IStream + +.rodata._ZTV11FileOStream + 0x1000a408 0x14 + .rodata._ZTV11FileOStream + 0x1000a408 0x14 ../../Library/Melon.o + 0x1000a408 vtable for FileOStream + +.rodata._ZTV11FileIStream + 0x1000a420 0x14 + .rodata._ZTV11FileIStream + 0x1000a420 0x14 ../../Library/Melon.o + 0x1000a420 vtable for FileIStream + +.rodata._ZTV13StringIStream + 0x1000a438 0x14 + .rodata._ZTV13StringIStream + 0x1000a438 0x14 ../../Library/Melon.o + 0x1000a438 vtable for StringIStream + +.rodata._ZTV8ShellApp + 0x1000a450 0x1c + .rodata._ZTV8ShellApp + 0x1000a450 0x1c ../../Library/Melon.o + 0x1000a450 vtable for ShellApp + +.rodata._ZTV11Application + 0x1000a470 0x1c + .rodata._ZTV11Application + 0x1000a470 0x1c ../../Library/Melon.o + 0x1000a470 vtable for Application + +.rodata._ZTV15VirtualTerminal + 0x1000a4a0 0x2c + .rodata._ZTV15VirtualTerminal + 0x1000a4a0 0x2c ../../Library/Melon.o + 0x1000a4a0 vtable for VirtualTerminal + +.rodata._ZTV9StreamApp + 0x1000a4d0 0x1c + .rodata._ZTV9StreamApp + 0x1000a4d0 0x1c ../../Library/Melon.o + 0x1000a4d0 vtable for StreamApp + +.rodata._ZTV5rot13 + 0x1000a4f0 0x1c + .rodata._ZTV5rot13 + 0x1000a4f0 0x1c Applets/rot13.o + 0x1000a4f0 vtable for rot13 + +.rel.dyn 0x1000a50c 0x0 + .rel.iplt 0x00000000 0x0 ../../Library/Melon.o + .rel.text 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN6Thread3getEv + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN7Process3getEv + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN6StringC1Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN6StringC1ERKS_ + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN6StringpLERKS_ + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN6StringpLE5WChar + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN6StringD1Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN6StringD0Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11BasicStringI5WCharEC2Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11BasicStringI5WCharED2Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11BasicStringI5WCharED1Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11BasicStringI5WCharED0Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11BasicStringI5WCharEC2ERKS1_ + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11BasicStringI5WCharE6affectERKS1_ + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11BasicStringI5WCharE6appendERKS1_ + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11BasicStringI5WCharE6appendES0_ + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN6VectorI6StringE4pushERKS0_ + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN9ByteArrayC1Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN9ByteArrayC1ERK6Stringh + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN4File4readER9ByteArray + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN4File5writeER9ByteArray + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN9ByteArrayD1Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN9ByteArrayD0Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11BasicStringIhEC2Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11BasicStringIhED2Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11BasicStringIhED1Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11BasicStringIhED0Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11BasicStringIhE5clearEv + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11BasicStringIhEpLEh + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11BasicStringIhE6appendEh + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN6StringC1E5WCharj + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN7OStreamD1Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN7OStreamD0Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11BasicStringI5WCharEC2ES0_j + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN10SimpleListI6StringEC1ERKS0_PS1_ + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN10SimpleListI6StringE8addAtEndERKS0_ + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN10SimpleListI6StringED1Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11BasicStringI5WCharE6affectES0_j + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN7OStreamD2Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN4FileC1E6Stringh6FSNode + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN6StringaSERKS_ + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZNK6StringeqERKS_ + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN7OStreamlsERK6String + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN7OStreamlsEi + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN15VirtualTerminalD1Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN15VirtualTerminalD0Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN15VirtualTerminal5getInEv + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN15VirtualTerminal6getOutEv + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN15VirtualTerminalC1Ej + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN15VirtualTerminal4readEv + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11ApplicationC2Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11ApplicationD2Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11ApplicationD1Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11ApplicationD0Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN11Application4exitEj + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN6flag_tC1Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN6flag_tD1Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZNK11BasicStringI5WCharE7compareERKS1_ + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZNK11BasicStringI5WCharE8containsERKS0_ + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN6VectorI6flag_tED1Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN6VectorI6StringE5clearEv + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN6flag_tC1ERKS_ + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN6VectorI6flag_tE4pushERKS0_ + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN2FS7cwdNodeEv + 0x00000000 0x0 ../../Library/Melon.o + .rel.rodata._ZTV6String + 0x00000000 0x0 ../../Library/Melon.o + .rel.rodata._ZTV11BasicStringI5WCharE + 0x00000000 0x0 ../../Library/Melon.o + .rel.rodata._ZTV9ByteArray + 0x00000000 0x0 ../../Library/Melon.o + .rel.rodata._ZTV11BasicStringIhE + 0x00000000 0x0 ../../Library/Melon.o + .rel.rodata._ZTV7OStream + 0x00000000 0x0 ../../Library/Melon.o + .rel.rodata._ZTV8ShellApp + 0x00000000 0x0 ../../Library/Melon.o + .rel.rodata._ZTV11Application + 0x00000000 0x0 ../../Library/Melon.o + .rel.rodata._ZTV15VirtualTerminal + 0x00000000 0x0 ../../Library/Melon.o + .rel.rodata._ZTV9StreamApp + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN5rot13C1Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.rodata._ZTV5rot13 + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN5rot13D1Ev + 0x00000000 0x0 ../../Library/Melon.o + .rel.text._ZN5rot13D0Ev + 0x00000000 0x0 ../../Library/Melon.o + +.data 0x1000b000 0x24 + 0x1000b000 start_ctors = . + *(.ctor*) + .ctors 0x1000b000 0x4 ../../Library/Melon.o + .ctors 0x1000b004 0x4 Applets/rot13.o + 0x1000b008 end_ctors = . + 0x1000b008 start_dtors = . + *(.dtor*) + 0x1000b008 end_dtors = . + *(.data) + .data 0x1000b008 0x18 ../../Library/Melon.o + 0x1000b008 Rand::m + 0x1000b00c Rand::a + 0x1000b010 Rand::b + 0x1000b018 Rand::current + .data 0x1000b020 0x4 Applets/rot13.o + 0x1000b020 app + +.igot.plt 0x1000b024 0x0 + .igot.plt 0x00000000 0x0 ../../Library/Melon.o + +.bss 0x1000b040 0x2b4 + 0x1000b040 sbss = . + *(COMMON) + *(.bss) + .bss 0x1000b040 0x208 ../../Library/Melon.o + 0x1000b040 WChar::CP437 + 0x1000b240 __dso_handle + 0x1000b244 heap + *fill* 0x1000b248 0x18 00 + .bss 0x1000b260 0x94 Applets/rot13.o + 0x1000b2f4 ebss = . + 0x1000b2f4 end = . + 0x1000b2f4 _end = . + 0x1000b2f4 __end = . +LOAD Applets/rot13.o +OUTPUT(Applets/rot13 elf32-i386) + +.note.GNU-stack + 0x00000000 0x0 + .note.GNU-stack + 0x00000000 0x0 ../../Library/Melon.o + .note.GNU-stack + 0x00000000 0x0 Applets/rot13.o + +.comment 0x00000000 0x27 + .comment 0x00000000 0x27 ../../Library/Melon.o + 0x2f8 (size before relaxing) + .comment 0x00000000 0x28 Applets/rot13.o 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.class.cpp b/Source/Applications/Shell/Shell.class.cpp index a2eb490..4283b30 100644 --- a/Source/Applications/Shell/Shell.class.cpp +++ b/Source/Applications/Shell/Shell.class.cpp @@ -27,6 +27,7 @@ int Shell::run() { while (1) { 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/Kernel/TaskManager/Thread.class.cpp b/Source/Kernel/TaskManager/Thread.class.cpp index af501fe..2cd9515 100644 --- a/Source/Kernel/TaskManager/Thread.class.cpp +++ b/Source/Kernel/TaskManager/Thread.class.cpp @@ -182,9 +182,11 @@ void Thread::handleException(registers_t *regs, int no) { if (rw) vt << "R/W "; if (us) vt << "User "; if (rsvd) vt << "Rsvd "; - vt << "At:" << (u32int)faddr; + vt << "At:" << (u32int)faddr << "\n"; - vt << "\nThread finishing.\n"; + Sys::stackTrace(regs->ebp, vt, 5, true); + + vt << "Thread finishing.\n"; Task::currentThreadExits(E_PAGEFAULT); //Calling this will setup a new stack return; } diff --git a/Source/Library/Common/FileStream.class.cpp b/Source/Library/Common/FileStream.class.cpp index 322e9aa..317a023 100644 --- a/Source/Library/Common/FileStream.class.cpp +++ b/Source/Library/Common/FileStream.class.cpp @@ -6,11 +6,13 @@ FileIStream::FileIStream(const String &filename, u8int encoding, FSNode start) : m_start(start) { m_file = new File(filename, FM_READ, start); + m_filenames = 0; m_encoding = encoding; } FileIStream::FileIStream(u8int encoding, FSNode start) : m_start(start) { m_file = 0; + m_filenames = 0; m_encoding = encoding; } @@ -30,10 +32,11 @@ void FileIStream::appendFile(const String &filename) { } String FileIStream::read() { - if (m_file == 0) return ""; - while (m_file->eof() or !m_file->valid()) { - m_file->close(); - delete m_file; + while (m_file == 0 or m_file->eof() or !m_file->valid()) { + if (m_file != 0) { + m_file->close(); + delete m_file; + } m_file = 0; if (m_filenames == 0) { return ""; diff --git a/Source/Library/Common/IStream.proto.cpp b/Source/Library/Common/IStream.proto.cpp index 59c623e..6176eac 100644 --- a/Source/Library/Common/IStream.proto.cpp +++ b/Source/Library/Common/IStream.proto.cpp @@ -51,7 +51,10 @@ WChar IStream::getChar() { String IStream::get(WChar delimiter) { waitLock(); //calculate length of string to read - if (m_buffer == 0) populate(); + if (m_buffer == 0) { + unlock(); + if (!populate()) return ""; + } int length = 0, ptr = m_ptr; for (SimpleList *iter = m_buffer; iter != 0;) { if (iter->v()[ptr] == delimiter) break; diff --git a/Source/Library/Common/OStream.proto.cpp b/Source/Library/Common/OStream.proto.cpp index ba876b3..f0667e7 100644 --- a/Source/Library/Common/OStream.proto.cpp +++ b/Source/Library/Common/OStream.proto.cpp @@ -11,6 +11,7 @@ OStream::OStream(const OStream& other) { } void OStream::put(const String &s) { + if (s.empty()) return; waitLock(); if (m_buffer == NULL or m_last == NULL) { m_buffer = m_last = new SimpleList(s); @@ -55,8 +56,9 @@ OStream& OStream::operator<< (ostream_modifiers_e m) { flush(); } else if (m == ENDL) { put("\n"); + flush(); } else if (m == END) { - put(String(EOF, 1)); + put(EOF); flush(); } return *this; diff --git a/Source/Library/Userland/App/ShellApp.proto.cpp b/Source/Library/Userland/App/ShellApp.proto.cpp index 840e985..123eb73 100644 --- a/Source/Library/Userland/App/ShellApp.proto.cpp +++ b/Source/Library/Userland/App/ShellApp.proto.cpp @@ -16,7 +16,8 @@ ShellApp::~ShellApp() { void ShellApp::init() { //Parse flags u32int argc = pr.argc(); - for (u32int i = 0; i < argc; i++) { + args.clear(); + for (u32int i = 1; i < argc; i++) { String arg = pr.argv(i); if (arg.empty()) continue; if (arg == "-") { @@ -89,7 +90,7 @@ void ShellApp::init() { //Eventually show help screen if (bFlag("help")) { outvt << appName << ": " << appDesc << "\n"; - outvt << "Usage: \t" << appName << " [-] \n\n"; + outvt << "Usage: \t" << pr.argv(0) << " [-] \n\n"; outvt << "Possible flags :\n"; for (u32int i = 0; i < flags.size(); i++) { outvt << " --" << flags[i].lName << "\t" << (flags[i].sName != 0 ? "-" : "") << String(flags[i].sName) << "\t"; diff --git a/Source/Library/Userland/App/StreamApp.proto.cpp b/Source/Library/Userland/App/StreamApp.proto.cpp index 97f473e..b1dc7dd 100644 --- a/Source/Library/Userland/App/StreamApp.proto.cpp +++ b/Source/Library/Userland/App/StreamApp.proto.cpp @@ -6,6 +6,7 @@ StreamApp::StreamApp(const String& name, const String& desc) : ShellApp(name, desc) { addFlag("o", "output", "Set the output to a file instead of the text output", FT_STR, ""); addFlag("e", "encoding", "Set the encoding for files (input and output)", FT_STR, "utf8"); + addFlag("a", "append", "When writing to a file, append instead of truncating", FT_BOOL, ""); } StreamApp::~StreamApp() { @@ -13,7 +14,7 @@ StreamApp::~StreamApp() { void StreamApp::init() { ShellApp::init(); - + u8int encoding = UE_UTF8; if (sFlag("encoding") == "utf8") encoding = UE_UTF8; if (sFlag("encoding") == "utf16be") encoding = UE_UTF16_BE; @@ -24,7 +25,7 @@ void StreamApp::init() { if (sFlag("output") == "") { out = &outvt; } else { - out = new FileOStream(sFlag("output"), FM_TRUNCATE, encoding, FS::cwdNode()); + out = new FileOStream(sFlag("output"), (bFlag("append") ? FM_APPEND : FM_TRUNCATE), encoding, FS::cwdNode()); } if (args.size() == 0) { diff --git a/Source/Library/Userland/Binding/VirtualTerminal.class.h b/Source/Library/Userland/Binding/VirtualTerminal.class.h index 54bdc53..2a38abd 100644 --- a/Source/Library/Userland/Binding/VirtualTerminal.class.h +++ b/Source/Library/Userland/Binding/VirtualTerminal.class.h @@ -39,6 +39,7 @@ class VirtualTerminal : public RessourceCaller, public OStream, public IStream { String ret = String::unserialize(doCall(VTIF_READLINE, 1)); if (ret[ret.size() - 1] == WChar(EOF)) { ret = ret.substr(0, ret.size() - 1); + if (ret.empty()) return ""; m_eof = true; } return ret += "\n"; -- cgit v1.2.3