Changeset b27a97b in mainline


Ignore:
Timestamp:
2006-05-31T15:41:19Z (19 years ago)
Author:
Josef Cejka <malyzelenyhnus@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c0e674a
Parents:
440cff5
Message:

Support for reading from stdin.
Getchar() implemented.

Files:
8 edited

Legend:

Unmodified
Added
Removed
  • console/console.c

    r440cff5 rb27a97b  
    100100                case KBD_PUSHCHAR:
    101101                        /* got key from keyboard driver */
     102                       
    102103                        /* find active console */
     104                       
    103105                        /* if client is awaiting key, send it */
     106                       
    104107                        /*FIXME: else store key to its buffer */
    105108                        retval = 0;
     
    113116                        /* Send it to first FB, DEBUG */
    114117//                      ipc_call_async_2(connections[0].vfb_phone, FB_PUTCHAR, 0, IPC_GET_ARG1(call),NULL,NULL);
    115                         ipc_call_sync_2(connections[0].vfb_phone, FB_PUTCHAR, 0, IPC_GET_ARG1(call),NULL,NULL);
     118//                      ipc_call_sync_2(connections[0].vfb_phone, FB_PUTCHAR, 0, IPC_GET_ARG1(call),NULL,NULL);
    116119
    117120                        break;
     
    149152                        return;
    150153                case CONSOLE_PUTCHAR:
    151                         /* TODO: send message to fb */
     154                        /* Send message to fb */
    152155                        ipc_call_async_2(connections[consnum].vfb_phone, FB_PUTCHAR, IPC_GET_ARG1(call), IPC_GET_ARG2(call), NULL, NULL);
    153156                        break;
    154157                case CONSOLE_GETCHAR:
    155                         /* FIXME: */
    156                         if (!keybuffer_pop(&(connections[active_client].keybuffer), (char *)&arg1)) {
     158                        /* FIXME: Only temporary solution until request storage will be created  */
     159                       
     160                        while (!keybuffer_pop(&(connections[active_client].keybuffer), (char *)&arg1)) {
    157161                                /* FIXME: buffer empty -> store request */
    158                                 arg1 = 'X'; /* Only temporary */
     162                                usleep(10000);
    159163                        };
    160 //ipc_call_async_2(connections[active_client].vfb_phone, FB_PUTCHAR, ' ', arg1, NULL, (void *)NULL);
     164                       
    161165                        break;
    162166                }
    163                 ipc_answer_fast(callid, 0,0,0);
     167                ipc_answer_fast(callid, 0, arg1, 0);
    164168        }
    165169}
     
    190194                /* TODO: init key_buffer */
    191195                while ((connections[i].vfb_phone = ipc_connect_me_to(PHONE_NS, SERVICE_VIDEO, 0)) < 0) {
    192                                
    193                         ipc_call_async_2(connections[i].vfb_phone, FB_PUTCHAR, 'a', 'b', NULL, (void *)NULL);
     196                        usleep(10000);
     197                        //ipc_call_async_2(connections[i].vfb_phone, FB_PUTCHAR, 'a', 'b', NULL, (void *)NULL);
    194198                }
    195199        }
  • init/init.c

    r440cff5 rb27a97b  
    416416}
    417417
     418static void test_console(void)
     419{
     420        int c;
     421
     422        while ((c = getchar()) != EOF)
     423                putchar(c);
     424}
     425
     426
    418427int main(int argc, char *argv[])
    419428{
     
    423432//      version_print();
    424433
     434        printf("Hello\nThis is Init\n");
     435       
    425436//      test_printf();
    426437//      test_printf2();
     
    437448//      test_async_kbd();
    438449//      test_fb();
    439 
    440         printf("Hello\nThis is Init\n\nBye.");
    441        
     450        test_console();
     451
     452        printf("\nBye.\n");
    442453
    443454/*     
  • libc/generic/io/io.c

    r440cff5 rb27a97b  
    9393        return EOF;
    9494}
     95
     96int getchar(void)
     97{
     98        unsigned char c;
     99        if (read(0, (void *)&c , 1) == 1) {
     100                        return c;
     101        }
     102       
     103        return EOF;
     104}
     105
     106
  • libc/generic/io/stream.c

    r440cff5 rb27a97b  
     1/*
     2 * Copyright (C) 2006 Josef Cejka
     3 * Copyright (C) 2006 Jakub Vana
     4 * All rights reserved.
     5 *
     6 * Redistribution and use in source and binary forms, with or without
     7 * modification, are permitted provided that the following conditions
     8 * are met:
     9 *
     10 * - Redistributions of source code must retain the above copyright
     11 *   notice, this list of conditions and the following disclaimer.
     12 * - Redistributions in binary form must reproduce the above copyright
     13 *   notice, this list of conditions and the following disclaimer in the
     14 *   documentation and/or other materials provided with the distribution.
     15 * - The name of the author may not be used to endorse or promote products
     16 *   derived from this software without specific prior written permission.
     17 *
     18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     28 */
     29
     30
    131#include <io/io.h>
    232#include <io/stream.h>
     
    939#include <ipc/services.h>
    1040#include <console.h>
     41#include <unistd.h>
    1142
    1243#define FDS 32
     
    3566}
    3667
    37 static char read_stdin(void)
     68static ssize_t read_stdin(void *param, void *buf, size_t count)
    3869{
    3970        ipcarg_t r0,r1;
    40         ipc_call_sync_2(console_phone, CONSOLE_GETCHAR, 0, 0, &r0, &r1);
    41        
    42         return r0;
     71        size_t i = 0;
     72
     73        while (i < count) {
     74                if (ipc_call_sync_2(console_phone, CONSOLE_GETCHAR, 0, 0, &r0, &r1) < 0) {
     75                        return -1;
     76                }
     77                ((char *)buf)[i++] = r0;
     78        }
     79        return i;
    4380        //return (ssize_t) __SYSCALL3(SYS_IO, 1, (sysarg_t) buf, (sysarg_t) count);
    4481}
     82
    4583static ssize_t write_stdout(void *param, const void *buf, size_t count)
    4684{
     
    126164        return 0;
    127165}
     166
     167ssize_t read(int fd, void *buf, size_t count)
     168{
     169        if (fd < FDS)
     170                return streams[fd].r(streams[fd].param, buf, count);
     171       
     172        return 0;
     173}
     174
  • libc/include/io/io.h

    r440cff5 rb27a97b  
    3535int putstr(const char * str);
    3636int putchar(int c);
     37int getchar(void);
    3738
    3839#endif
  • libc/include/io/stream.h

    r440cff5 rb27a97b  
     1/*
     2 * Copyright (C) 2006 Jakub Vana
     3 * All rights reserved.
     4 *
     5 * Redistribution and use in source and binary forms, with or without
     6 * modification, are permitted provided that the following conditions
     7 * are met:
     8 *
     9 * - Redistributions of source code must retain the above copyright
     10 *   notice, this list of conditions and the following disclaimer.
     11 * - Redistributions in binary form must reproduce the above copyright
     12 *   notice, this list of conditions and the following disclaimer in the
     13 *   documentation and/or other materials provided with the distribution.
     14 * - The name of the author may not be used to endorse or promote products
     15 *   derived from this software without specific prior written permission.
     16 *
     17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27 */
     28
    129#include <libarch/types.h>
    2 #include <unistd.h>
    330
    431#define EMFILE -17
     
    835
    936typedef ssize_t (*pwritefn_t)(void *, const void *, size_t);
    10 typedef char (*preadfn_t)(void);
     37typedef ssize_t (*preadfn_t)(void *, void *, size_t);
    1138
    1239fd_t open(const char *fname, int flags);
  • libc/include/stdio.h

    r440cff5 rb27a97b  
    3535#define EOF (-1)
    3636
     37extern int getchar(void);
     38
    3739extern int puts(const char * str);
    3840extern int putchar(int c);
  • libc/include/unistd.h

    r440cff5 rb27a97b  
    3737
    3838extern ssize_t write(int fd, const void * buf, size_t count);
     39extern ssize_t read(int fd, void * buf, size_t count);
    3940extern void _exit(int status);
    4041void *sbrk(ssize_t incr);
Note: See TracChangeset for help on using the changeset viewer.