Changeset ff9244a in mainline
- Timestamp:
- 2007-12-26T22:16:21Z (17 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 2f02aa17
- Parents:
- 75ae31d
- Location:
- uspace
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/tetris/screen.c
r75ae31d rff9244a 119 119 scr_init(void) 120 120 { 121 con_phone = get_ fd_phone(1);121 con_phone = get_cons_phone(); 122 122 async_msg_1(con_phone, CONSOLE_CURSOR_VISIBILITY, 0); 123 123 resume_normal(); -
uspace/lib/libc/generic/io/io.c
r75ae31d rff9244a 48 48 49 49 for (count = 0; str[count] != 0; count++); 50 if (write (1,(void *) str, count) == count) {51 if (write (1,&nl, 1) == 1)50 if (write_stdout((void *) str, count) == count) { 51 if (write_stdout(&nl, 1) == 1) 52 52 return 0; 53 53 } … … 63 63 int putnchars(const char *buf, size_t count) 64 64 { 65 if (write (1,(void *) buf, count) == count)66 65 if (write_stdout((void *) buf, count) == count) 66 return 0; 67 67 68 68 return EOF; … … 80 80 81 81 for (count = 0; str[count] != 0; count++); 82 if (write (1,(void *) str, count) == count)83 82 if (write_stdout((void *) str, count) == count) 83 return 0; 84 84 85 85 return EOF; … … 89 89 { 90 90 unsigned char ch = c; 91 if (write (1,(void *) &ch, 1) == 1)92 91 if (write_stdout((void *) &ch, 1) == 1) 92 return c; 93 93 94 94 return EOF; … … 98 98 { 99 99 unsigned char c; 100 if (read (0,(void *) &c, 1) == 1)101 100 if (read_stdin((void *) &c, 1) == 1) 101 return c; 102 102 103 103 return EOF; -
uspace/lib/libc/generic/io/stream.c
r75ae31d rff9244a 48 48 #include <sys/types.h> 49 49 50 #define FDS 32 50 static int console_phone = -1; 51 51 52 typedef struct stream_t { 53 pwritefn_t w; 54 preadfn_t r; 55 void * param; 56 int phone; 57 } stream_t; 58 59 static int console_phone = -1; 60 static stream_t streams[FDS]; 61 62 static ssize_t write_stderr(void *param, const void *buf, size_t count) 52 ssize_t write_stderr(const void *buf, size_t count) 63 53 { 64 54 return count; 65 55 } 66 56 67 s tatic ssize_t read_stdin(void *param,void *buf, size_t count)57 ssize_t read_stdin(void *buf, size_t count) 68 58 { 69 59 ipcarg_t r0, r1; … … 71 61 72 62 while (i < count) { 73 if (async_req_0_2( streams[0].phone, CONSOLE_GETCHAR,&r0,63 if (async_req_0_2(console_phone, CONSOLE_GETCHAR, &r0, 74 64 &r1) < 0) { 75 65 return -1; … … 80 70 } 81 71 82 s tatic ssize_t write_stdout(void *param,const void *buf, size_t count)72 ssize_t write_stdout(const void *buf, size_t count) 83 73 { 84 74 int i; 85 75 86 76 for (i = 0; i < count; i++) 87 async_msg_1( streams[1].phone, CONSOLE_PUTCHAR,77 async_msg_1(console_phone, CONSOLE_PUTCHAR, 88 78 ((const char *) buf)[i]); 89 79 … … 91 81 } 92 82 93 static stream_topen_stdin(void)83 void open_stdin(void) 94 84 { 95 stream_t stream;96 97 85 if (console_phone < 0) { 98 86 while ((console_phone = ipc_connect_me_to(PHONE_NS, … … 101 89 } 102 90 } 103 104 stream.r = read_stdin;105 stream.w = NULL;106 stream.param = 0;107 stream.phone = console_phone;108 109 return stream;110 91 } 111 92 112 static stream_topen_stdout(void)93 void open_stdout(void) 113 94 { 114 stream_t stream;115 116 95 if (console_phone < 0) { 117 96 while ((console_phone = ipc_connect_me_to(PHONE_NS, … … 120 99 } 121 100 } 122 123 stream.r = NULL;124 stream.w = write_stdout;125 stream.phone = console_phone;126 stream.param = 0;127 128 return stream;129 101 } 130 102 131 static ssize_t write_null(void *param, const void *buf, size_t count)103 int get_cons_phone(void) 132 104 { 133 return count; 134 } 135 136 fd_t open(const char *fname, int flags) 137 { 138 int c = 0; 139 140 while (((streams[c].w) || (streams[c].r)) && (c < FDS)) 141 c++; 142 143 if (c == FDS) 144 return EMFILE; 145 146 if (!strcmp(fname, "stdin")) { 147 streams[c] = open_stdin(); 148 return c; 149 } 150 151 if (!strcmp(fname, "stdout")) { 152 streams[c] = open_stdout(); 153 return c; 154 } 155 156 if (!strcmp(fname, "stderr")) { 157 streams[c].w = write_stderr; 158 return c; 159 } 160 161 if (!strcmp(fname, "null")) { 162 streams[c].w = write_null; 163 return c; 164 } 165 166 return -1; 167 } 168 169 170 ssize_t write(int fd, const void *buf, size_t count) 171 { 172 if (fd < FDS && streams[fd].w) 173 return streams[fd].w(streams[fd].param, buf, count); 174 175 return 0; 176 } 177 178 ssize_t read(int fd, void *buf, size_t count) 179 { 180 if (fd < FDS && streams[fd].r) 181 return streams[fd].r(streams[fd].param, buf, count); 182 183 return 0; 184 } 185 186 int get_fd_phone(int fd) 187 { 188 if (fd >= FDS || fd < 0) 189 return -1; 190 return streams[fd].phone; 105 return console_phone; 191 106 } 192 107 -
uspace/lib/libc/generic/io/vprintf.c
r75ae31d rff9244a 44 44 static int vprintf_write(const char *str, size_t count, void *unused) 45 45 { 46 return write (1,str, count);46 return write_stdout(str, count); 47 47 } 48 48 -
uspace/lib/libc/generic/libc.c
r75ae31d rff9244a 69 69 void __io_init(void) 70 70 { 71 open("stdin", 0); 72 open("stdout", 0); 73 open("stderr", 0); 71 open_stdin(); 72 open_stdout(); 74 73 } 75 74 -
uspace/lib/libc/include/io/stream.h
r75ae31d rff9244a 40 40 #define EMFILE -17 41 41 42 typedef int fd_t; 42 extern void open_stdin(void); 43 extern void open_stdout(void); 43 44 44 typedef ssize_t (*pwritefn_t)(void *, const void *, size_t); 45 typedef ssize_t (*preadfn_t)(void *, void *, size_t); 45 extern ssize_t read_stdin(void *, size_t); 46 extern ssize_t write_stdout(const void *, size_t); 47 extern ssize_t write_stderr(const void *, size_t); 46 48 47 fd_t open(const char *fname, int flags); 48 int get_fd_phone(int fd); 49 extern int get_cons_phone(void); 49 50 50 51 #endif
Note:
See TracChangeset
for help on using the changeset viewer.