diff --git a/src/userland/ioManager/main.c b/src/userland/ioManager/main.c index 81194e8..f932cd0 100644 --- a/src/userland/ioManager/main.c +++ b/src/userland/ioManager/main.c @@ -1,7 +1,7 @@ #include #include -uint32_t mainService, mainOut, globalService, globalOut, globalBulkOut; +uint32_t mainService, mainOut, mainBulkOut, globalService, globalOut, globalBulkOut; uint32_t focusService, focusServiceKeyHandler; uint32_t currentKeyConsumerService, currentKeyConsumerFunction; @@ -25,6 +25,11 @@ syscall(-1, 0, 0, 0, 0); } lock = true; + if (mainBulkOut) { + request(mainService, mainBulkOut, stringId, 0); + lock = false; + return; + } readString(stringId, buffer); for (uint32_t i = 0; buffer[i]; i++) { request(mainService, mainOut, buffer[i], 0); @@ -138,6 +143,7 @@ createFunction("checkFocus", (void *)doCheckFocus); mainService = loadFromInitrd("vga"); mainOut = getFunction(mainService, "writeChar"); + mainBulkOut = getFunction(mainService, "writeBulk"); globalService = loadFromInitrd("parallel"); globalOut = getFunction(globalService, "writeChar"); globalBulkOut = getFunction(globalService, "write_bulk"); diff --git a/src/userland/ioManager/main.c b/src/userland/ioManager/main.c index 81194e8..f932cd0 100644 --- a/src/userland/ioManager/main.c +++ b/src/userland/ioManager/main.c @@ -1,7 +1,7 @@ #include #include -uint32_t mainService, mainOut, globalService, globalOut, globalBulkOut; +uint32_t mainService, mainOut, mainBulkOut, globalService, globalOut, globalBulkOut; uint32_t focusService, focusServiceKeyHandler; uint32_t currentKeyConsumerService, currentKeyConsumerFunction; @@ -25,6 +25,11 @@ syscall(-1, 0, 0, 0, 0); } lock = true; + if (mainBulkOut) { + request(mainService, mainBulkOut, stringId, 0); + lock = false; + return; + } readString(stringId, buffer); for (uint32_t i = 0; buffer[i]; i++) { request(mainService, mainOut, buffer[i], 0); @@ -138,6 +143,7 @@ createFunction("checkFocus", (void *)doCheckFocus); mainService = loadFromInitrd("vga"); mainOut = getFunction(mainService, "writeChar"); + mainBulkOut = getFunction(mainService, "writeBulk"); globalService = loadFromInitrd("parallel"); globalOut = getFunction(globalService, "writeChar"); globalBulkOut = getFunction(globalService, "write_bulk"); diff --git a/src/userland/vga/main.c b/src/userland/vga/main.c index bad3462..43d3f51 100644 --- a/src/userland/vga/main.c +++ b/src/userland/vga/main.c @@ -50,7 +50,18 @@ writeChar(c, COLOR(white, black)); } +void writeBulk(uint32_t stringId) { + uint32_t length = getStringLength(stringId); + char *buffer = malloc(length); + readString(stringId, buffer); + for (uint32_t i = 0; i < length; i++) { + write(buffer[i]); + } +} + + int32_t main() { videoSource = requestMemory(2, NULL, PTR(0xB8000)); createFunction("writeChar", (void *)write); + createFunction("writeBulk", (void *)writeBulk); }