[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     ! 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