[BACK]Return to fcons.c CVS log [TXT][DIR] Up to [local] / funnyos / dev / fcons

Annotation of funnyos/dev/fcons/fcons.c, Revision 1.1.1.1

1.1       init        1: /*
                      2:  * $Id: fcons.c,v 1.1.1.1 2007/10/12 08:40:38 init Exp $
                      3:  */
                      4: #include <sys/types.h>
                      5: #include <sys/device.h>
                      6: #include <dev/fcons/fconsvar.h>
                      7: #include <libkern/printf.h>
                      8:
                      9: /*
                     10:  * funnyOS console.
                     11:  * 80x25, monochrome.
                     12:  */
                     13:
                     14: struct fcons_devdata   fcons_dd[NFCONS];
                     15:
                     16: /* current console device */
                     17: struct device *curcons;
                     18:
                     19: extern void (*putchar)(char);
                     20:
                     21: int    fcons_attach(struct device *);
                     22: void   fcons_putchar(struct device *, char);
                     23: char   fcons_getchar(struct device *);
                     24: void   fcons_dfltputchar(char);
                     25: int    fcons_devctl(struct device *, uint8_t, void *);
                     26:
                     27: int
                     28: fcons_attach(struct device *self)
                     29: {
                     30:        /*
                     31:         * Attach fcons abstraction using parent's getc & putc.
                     32:         */
                     33:        /* associate dev data */
                     34:        self->dv_devdata = &fcons_dd[self->dv_minor];
                     35:
                     36:        fcons_dd[self->dv_minor].currow = 0;
                     37:        fcons_dd[self->dv_minor].curcol = 0;
                     38:
                     39:        /* make cureent console default */
                     40:        curcons = self;
                     41:
                     42:        /*
                     43:         * XXX Register system printf's , etc..
                     44:         */
                     45:        /* override early putchar */
                     46:        putchar = fcons_dfltputchar;
                     47:
                     48:        printf("system console (80x25, monochrome, no video buffer)\n");
                     49:
                     50:        return(0);
                     51: }
                     52:
                     53:
                     54: void
                     55: fcons_putchar(struct device *devp, char ch)
                     56: {
                     57:        struct consoleops *copsp;
                     58:
                     59:        copsp = devp->dv_parent->dv_devdata;
                     60:
                     61:        if (fcons_dd[devp->dv_minor].curcol == (FCONS_WIDTH - 1)) {
                     62:                /* CRLF */
                     63:                fcons_dd[devp->dv_minor].curcol = 0;
                     64:                fcons_dd[devp->dv_minor].currow++;
                     65:
                     66:                /* XXX pass \n to lower level (not all devices work this way) */
                     67:                copsp->putc(devp->dv_parent, '\n');
                     68:        }
                     69:        /* XXX do something if col == FCONS_HEIGHT; console buffer? */
                     70:
                     71:        if (fcons_dd[devp->dv_minor].currow == FCONS_HEIGHT) {
                     72:                /* tmp hack; should really follow clrscr */
                     73:                fcons_dd[devp->dv_minor].currow = 0;
                     74:        }
                     75:
                     76:        copsp->putc(devp->dv_parent, ch);
                     77: }
                     78:
                     79:
                     80: char
                     81: fcons_getchar(struct device *devp)
                     82: {
                     83:        /* TODO */
                     84:        return ' ';
                     85: }
                     86:
                     87:
                     88: void
                     89: fcons_dfltputchar(char ch)
                     90: {
                     91:        /*
                     92:         * Put a character into default (current) console.
                     93:         */
                     94:        fcons_putchar(curcons, ch);
                     95:
                     96:        return;
                     97: }
                     98:
                     99:
                    100: int
                    101: fcons_devctl(struct device *devp, uint8_t ctl, void *data)
                    102: {
                    103:        /*
                    104:         * Devctl support for fcons device.
                    105:         */
                    106:        switch(ctl) {
                    107:                case DCFCONS_GETCURROW:
                    108:                        /* return cursor's row  */
                    109:                        data = &fcons_dd[devp->dv_minor].currow;
                    110:                        return(0);
                    111:                case DCFCONS_GETCURCOL:
                    112:                        /* return cursor's column */
                    113:                        data = &fcons_dd[devp->dv_minor].curcol;
                    114:                        return(0);
                    115:                case DCFCONS_PUTCHAR:
                    116:                        /* put a character to the device */
                    117:                        fcons_putchar(devp, *(char*)data);
                    118:                        return(0);
                    119:                case DCFCONS_GETCHAR:
                    120:                        /* get a character from the device */
                    121:                        /* TODO */
                    122:                        return(-1);
                    123:                default:
                    124:                        /* unknown devctl */
                    125:                        return(-1);
                    126:        }
                    127:
                    128: }
                    129:

CVSweb