[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Lost] [Patch] getterm
Antoine Kaufmann schrieb:
Index: src/modules/c/getterm/Makefile.all
===================================================================
--- src/modules/c/getterm/Makefile.all (Revision 0)
+++ src/modules/c/getterm/Makefile.all (Revision 0)
@@ -0,0 +1,8 @@
+shopt -s extglob
+source $LOST_BUILDMK_ROOT/config.sh
+
+echo "LD $1/apps/getterm"
+
+$LOST_TOOLS_LD -ogetterm -Ttext=0x40000000 --start-group *.o $2 --end-group
+
+mv getterm $1/apps/
Ersetz das bitte durch die mittlerweile übliche strip-Zeile.
Index: src/modules/c/getterm/main.c
===================================================================
--- src/modules/c/getterm/main.c (Revision 0)
+++ src/modules/c/getterm/main.c (Revision 0)
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2007 The LOST Project. All rights reserved.
Ja, ich weiß, das Jahr ist noch jung... ;-)
+// Aufruf an Console zum aendern der Terminal-Optionen
+typedef enum {STDIN, STDOUT, STDERR} console_handle_t;
+typedef struct {
+ pid_t pid;
+ console_handle_t type;
+ char path[];
+} __attribute__((packed)) console_ctrl_t;
+
+/**
+ * Pfad fuer Terminal aendern
+ */
+static void console_set_handle(console_handle_t handle, const char* path)
+{
+ size_t path_len = strlen(path);
+ size_t size = sizeof(console_ctrl_t) + path_len + 1;
+
+ // Buffer vorbereiten
+ uint8_t buffer[size];
+ console_ctrl_t* ctrl = (console_ctrl_t*) buffer;
+
+ // Befehlsstruktur auffuellen
+ ctrl->pid = -1;
+ ctrl->type = handle;
+ memcpy(ctrl->path, path, path_len + 1);
+
+ // RPC durchfuehren
+ pid_t console_pid = init_service_get("console");
+ dword result = rpc_get_dword(console_pid, "CONS_SET",
+ size, (char*) buffer);
+ if (result == 0) {
+ printf("Fehler beim setzen des Pfades fuer die I/O-Handles.");
+ exit(-1);
+ }
+}
+
+/**
+ * Hauptfunktion
+ */
+int main(int argc, char* argv[])
+{
+ // Wenn die Anzahl der Argumente nicht stimmt wird abgebrochen
+ if (argc != 5) {
+ puts("Aufruf: getterm <stdin> <stdout> <stderr> <Programm>");
+ return -1;
+ }
+
+ // Ein bisschen warten, bis vterm und co bereit sind;
+ msleep(2000);
Ähem. Wir haben schon genug von diesem Mist im SVN...
+ // Lokale Ein- und Ausgabehandles auch anpassen
+ stdio_init();
stdio_init() ist nicht dafür vorgesehen, mehrmals aufgerufen zu werden.
Konkret: Mindestens Leaks, weil stdin/out/err nicht geschlossen werden.
+
+ while (TRUE) {
+ char input = 0;
+ printf("\n\nEingabetaste druecken um eine Shell zu starten...\n");
Vielleicht besser "um %s zu starten" mit dem Pfad des Programms?
+ // Auf Druecken der Eingabetaste warten
+ while((fread(&input, 1, 1, stdin) != 1) || (input != '\n')) {
+ msleep(100);
yield();