Fixed print macros in stdio.h, fixed bug in readline.c, expanded matrix.c
authorPaul Pearce <pearce@eecs.berkeley.edu>
Sun, 31 May 2009 23:42:24 +0000 (19:42 -0400)
committerKevin Klues <klueska@cs.berkeley.edu>
Fri, 5 Jun 2009 01:16:43 +0000 (18:16 -0700)
Fixed a bug in the arguments of the printk and printd macros in stdio.h. This bug
caused strange behavior in user land apps, such as the arguments to sbrk being
trashed.

Corrected the behavior of readline() to detect errors on the return value, not
the character returned, and removed a floating point printf format character.

Expanded matrix.c to include the full help message and execute the correct apps.

kern/src/manager.c
user/apps/parlib/matrix.c
user/apps/parlib/readline.c
user/parlib/src/newlib_backend.c
user/roslib/inc/stdio.h

index cd9908c..fb0ebd1 100644 (file)
@@ -42,7 +42,7 @@ void manager(void)
        
        if(progress == 0) {
                progress++;
-               env_batch[0] = ENV_CREATE(parlib_file_io);
+               env_batch[0] = ENV_CREATE(parlib_matrix);
                env_run(env_batch[0]);
        }
        return;
index 82ea56f..cd6d5bc 100644 (file)
@@ -9,10 +9,10 @@ extern void draw_nanwan();
 extern void clrscrn(int leaverows);
 
 void help() {
-       printf("Possible commands to run:\n");
-//            "  draw_nanwan: Draw a picture of Nanwan, our mascot giraffe\n"
-//            "  clrscrn:     Clear the Screen\n"
-//           );
+       printf("Possible commands to run:\n"
+              "  draw_nanwan: Draw a picture of Nanwan, our mascot giraffe\n"
+              "  clear_screen:     Clear the Screen\n"
+             );
 }
 
 int main(int argc, char** argv)
@@ -22,12 +22,12 @@ int main(int argc, char** argv)
        clrscrn(2);
        while(1) {
                char* s = readline("nanwan@ros$ ");
-//             printf("%s\n", s);
-//             if(strcmp(s, "draw_nanwan") == 0)
-//                     draw_nanwan();          
-//             else if(strcmp(s, "clrsrcn") == 0)
-//                     clrscrn(0);             
-//             else 
+               printf("%s\n", s);
+               if(strcmp(s, "draw_nanwan") == 0)
+                       draw_nanwan();          
+               else if(strcmp(s, "clear_screen") == 0)
+                       clrscrn(0);             
+               else 
                        help(); 
 
        }       
index f0455cd..133273c 100644 (file)
@@ -5,7 +5,8 @@
 
 char* readline(const char *prompt)
 {
-       int i, c;
+       int i, read_amt;
+       char c;
        #define BUFLEN 256
        static char buf[BUFLEN];
 
@@ -14,9 +15,9 @@ char* readline(const char *prompt)
 
        i = 0;
        while (1) {
-               read(STDIN_FILENO, &c, 1);
-               if (c < 0) {
-                       printf("read error: %e\n", c);
+               read_amt = read(STDIN_FILENO, &c, 1);
+               if (read_amt < 0) {
+                       printf("read error: %d\n",read_amt);
                        return NULL;
                } else if (c >= ' ' && i < BUFLEN-1) {
                        write(STDOUT_FILENO, &c, 1);
index e978bf7..fb074ec 100644 (file)
@@ -14,7 +14,7 @@
 #include <stdio.h>
 #include <debug.h>
 
-#define debug_in_out(...) debug(__VA_ARGS__)  
+#define debug_in_out(...) // debug(__VA_ARGS__)  
 #define debug_write_check(fmt, ...) // debug(fmt, __VA_ARGS__)
 
 /* environ
@@ -174,7 +174,11 @@ int getpid(void)
 int isatty(int file) 
 {
        debug_in_out("ISATTY\n");
-//     return 1;
+
+       // Cheap hack to avoid sending serial comm for stuff we know
+       if ((STDIN_FILENO == file) || (STDOUT_FILENO == file) || (STDERR_FILENO == file))
+               return 1;
+
        
        // Allocate a new buffer of proper size
        byte *out_msg = malloc(ISATTY_MESSAGE_FIXED_SIZE);
index 72d63b2..cb96d5d 100644 (file)
@@ -8,12 +8,12 @@
 #endif /* !NULL */
 
 #ifdef DEBUG
-#define printd(args...) cprintf(args)
+#define printd(fmt, ...) cprintf(fmt, #__VA_ARGS__)
 #else
-#define printd(args...) {}
+#define printd(fmt, ...) {}
 #endif
 
-#define printk(args...) cprintf(args)
+#define printk(fmt, ...) cprintf(fmt, #__VA_ARGS__)
 
 // lib/stdio.c
 void cputchar(int c);