Files
mips/src/libsys/console.c
T
2017-01-14 20:31:34 +00:00

142 lines
2.2 KiB
C

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
#include <assert.h>
#include <stddef.h>
#include <string.h>
#include "console.h"
extern con_if_t con_if;
// Funcs
con_if_entry_t const* con_getInterface(int file)
{
con_if_entry_t const *result = NULL;
int i;
for (i=0; i < con_if.length; i++)
{
if (file == con_if.con_if_entry[i].fd)
{
result = &con_if.con_if_entry[i];
break;
}
}
return result;
}
con_if_entry_t const* con_getInterfaceByName(char const *pName)
{
void const *result = NULL;
int i;
for (i=0; i < con_if.length; i++)
{
if (!strcmp(pName, con_if.con_if_entry[i].pName))
{
result = &con_if.con_if_entry[i];
break;
}
}
return result;
}
void const* con_getInstanceByName(char const *pName)
{
void const *result = NULL;
int i;
for (i=0; i < con_if.length; i++)
{
if (!strcmp(pName, con_if.con_if_entry[i].pName))
{
result = con_if.con_if_entry[i].pInst;
break;
}
}
return result;
}
int con_open(char const *pName)
{
int i;
assert(pName);
for (i=0; i < con_if.length; i++)
{
if (!strcmp(pName, con_if.con_if_entry->pName))
{
if (con_if.con_if_entry->openFunc)
{
con_if.con_if_entry->openFunc(&con_if.con_if_entry[i].pInst);
return i;
}
}
}
return -1;
}
int con_close(int fd)
{
}
void con_flush(int fd)
{
int c;
con_if_entry_t const *pIF = con_getInterface(fd);
do
{
c = pIF->readchar(pIF->pInst);
} while(c > 0);
}
int con_readchar(con_if_entry_t const *pIF)
{
int c;
assert(pIF);
// busy read
do
{
c = pIF->readchar(pIF->pInst);
} while(c < 0);
return c;
}
void con_writechar(con_if_entry_t const *pIF, char c)
{
assert(pIF);
pIF->writechar(pIF->pInst, c);
}
// ---------------------------------------------------------------------------------
int readchar(int fd)
{
return con_readchar(con_getInterface(fd));
}
void writechar(int fd, char c)
{
con_writechar(con_getInterface(fd), c);
}
void _putchar(int fd, char c)
{
if (c == 0x0A)
{
writechar(fd, 0x0D);
}
writechar(fd, c);
}
char _getchar()
{
return readchar(0);
}